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

xiaoxiao2021-02-28  88

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;

}

转载请注明原文地址: https://www.6miu.com/read-97384.html

最新回复(0)