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
原创粉丝点击