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培訓機構。