C++_静态数据成员和静态成员函数
来源:互联网 发布:屏幕特效软件 编辑:程序博客网 时间:2024/05/01 14:23
1.如何实现属于某个类的所有对象共享某个数据?
解决的办法:
解决的办法:
将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。
2.静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,所以必须对它初始化,且对它的初始化不能在构造函数中进行;静态数据成员不属于任何对象, 它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的隐蔽性。
3.定义
静态数据成员:用关键字static声明,该类的所有对象维护该成员的同一个拷贝,必须在类外定义和初始化,用::来指明所属的类;
静态成员函数:类外代码可以使用类名和作用域操作符来调用静态成员函数;静态成员函数只能引用属于该类的静态数据成员和静态成员函数。
例1:
//具有静态数据成员和静态成员函数的point类#include <iostream>using namespace std;class point{private:int x;int y;static int count;//静态成员声明public:point(int vx = 0, int vy = 0) :x(vx), y(vy) { count++; }//带参数的构造函数point(point &p);//拷贝构造函数static void showCount();//静态函数成员void print();~point() { count--; }//析构函数};int point::count = 0;//在类外定义和初始化静态成员point::point(point & p){x = p.x + 2;y = p.y + 3;count++;}void point::showCount(){cout << "count:" << count << endl;}void point::print(){cout << "x = " << x << ",y = " << y << endl;}int main(){point p1(1, 2);//创建对象p1.print();p1.showCount();point p2(p1);//调用拷贝构造函数p2.print();p1.showCount();getchar();}/*运行结果:x = 1, y = 2count = 1x = 3, y = 5count = 2*/
例2:
#include <iostream>using namespace std;enum access_value{shared,in_use,locked,unlocked};//定义枚举类型,表示资源的状态class access {private:static access_value acs;//定义静态数据成员,只能取上述枚举类型中的值public:static void set_access(access_value a);//设定资源的状态static access_value get_access();//获取资源的状态};void access::set_access(access_value a)//设定资源的状态{acs = a;}access_value access::get_access()//获取资源的状态{return acs;}access_value access::acs = shared;//初始化静态数据成员char* value(int x)//根据数字返回枚举类型{static char a[4][10] = { "shared","in_use","locked","unlocked"};switch (x){case 0:return a[0]; break;case 1:return a[1]; break;case 2:return a[2]; break;case 3:return a[3]; break;default:break;}}int main(){access obj1;//定义对象cout << "obj1 access:" << value(obj1.get_access()) << endl;obj1.set_access(unlocked);cout << "obj1 access:" << value(obj1.get_access()) << endl;getchar();}/*运行结果:obj1 access:sharedobj1 access:unlocked*/
1 0
- C++_静态数据成员和静态成员函数
- static(c++)静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态成员数据和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态成员函数
- 静态数据成员和静态函数成员
- 静态数据成员和静态成员函数
- 静态成员:静态数据成员和静态成员函数
- C++静态成员:静态数据成员和静态函数成员
- 静态成员函数和数据成员
- 静态数据成员和函数
- C++_静态成员
- xcode 断点卡死
- 微信硬件平台蓝牙设备开发(一)
- php源码之路第五章第七节 (对象)
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 什么是CSS3?
- C++_静态数据成员和静态成员函数
- 如何配置java的JDK信息
- spring+mybatis+junit测试问题
- VC++ 文件读取并在CListControl上展示
- 用自己的思路编写一个$.extend()/Object.assign()对象合并函数
- POI2014 Ant colony
- RecyclerView中使用CheckBox出现勾选混乱的解决方案
- 【codevs 1011】数的计算
- SQLYog快捷键大全