1.静态属性成员:
class MyCls {
public:
int aa;
int bb;
};
用MyCls类型创建对象a,b; 每个对象都有自己aa,bb成员,可以存放自己的属性值.
但有些场合,如统计MyCls创建出对象的个数,需要所有的类对象共用一个属性成员才可以,共用的属性成员就是静态的属性成员
Class MyCls {
public:
static int count; //这里是声明静态属性成员,创建一个对象时不能对它分配空间.
MyCls() {
count++;
}
};
int MyCls::count =0; //静态属性成员需要在函数外部声明并初始化,相当于声明一个全局变量,而这个全局变量是属于MyCls名称空间的.
int main()
{
MyCls a, b, c;
cout <<&a.count << endl;
cout <<&b.count << endl;
cout <<&b.count << endl;
cout <<a.count << endl;
cout <<MyCls::count << endl; //也可以直接通过类名访问公有的静态成员
return 0;
};
2. 静态的函数成员
静态公有函数成员可以不用创建对象,直接用”类名::函数名()”来调用.
#include <iostream>
using namespace std;
class MyCls {
private:
int id;
public:
static voidshow()
{
// id = 88;//在静态函数里不能直接访问非静态的成员
cout <<"MyCls show " << endl;
}
};
int main(void)
{
MyCls a, *p =new MyCls;
a.show();
p->show();//一般情况下,需要创建对象后才可以调用类对象的函数.
MyCls::show();//静态的公有函数可以直接通过类名访问.
return 0;
}
3. 静态公有成员与C++单例模式
在某些场合,我们需要限制一种类型的对象个数。如我们系统里只会有一个摄像头,那我们就可以用classCamera来描述摄像头的功能,但对象只能有一个.
ClassCamera {
private:
intfd;
Camera(stringdev_file) { //构造函数是私有的权限,只能在类的内部创建对象.这时可以通过静态的公有函数成员,在类内部创建对象,并让外部获取到对象的地址来调用。
}
public:
intgetJpg(char *data){
}
staticCamera *getCameraObject(string dev_file) {
staticCamera cam(dev_file);
return&cam;
}
};
intmain(void)
{
//Cameracam(“/dev/video0”); //创建对象时,在这里自动调用cam.Camera(string)构造函数.也就是只有公有的构造函数,才可以在类的外部创建对象.
Camera*cam;
cam= Camera::getCameraObject(“/dev/video0”);
cam->getJpg(NULL);
return0;
}
本文由广州尚观科技发布,广州尚观科技,专业的Linux/Java/嵌入式/HTML5/Python/UI培训机构。