静态公有成员与C++单例模式

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培训机构。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章