1. 程式人生 > 實用技巧 >C++__靜態成員

C++__靜態成員

靜態成員

在類定義中,它的成員(包括成員變數和成員函式),這些成員可以用關鍵字static宣告為靜態的,稱為靜態成員。

不管這個類建立了多少個物件,靜態成員只有一個拷貝,這個拷貝被所有屬於這個類的物件共享。

靜態成員變數:

在一個類中,如果將一個成員變數宣告為static,這種成員稱為靜態成員變數,不管建立了多少個物件都只有一個靜態資料的拷貝。靜態成員變數是屬於整個類,所有物件共享。

靜態變數在編譯階段就分配空間,物件還沒有建立的時候就已經分配空間了。

注意點

靜態成員變數必須在類中宣告,在類外定義

靜態資料成員不屬於某個物件,在為物件分配空間中不包括靜態成員所佔空間

靜態資料成員可以通過類名或者物件名來引用

//例子
class Person{
public:
//類的靜態成員屬性
static int sNum;
private:
static int sOther;
};

//類外初始化,初始化時不加static
int Person::sNum = 0;
int Person::sOther = 0;
int main(){


//1. 通過類名直接訪問
Person::sNum = 100;
cout << "Person::sNum:" << Person::sNum << endl;

//2. 通過物件訪問
Person p1, p2;
p1.sNum = 200;

cout << "p1.sNum:" << p1.sNum << endl;
cout << "p2.sNum:" << p2.sNum << endl;

//3. 靜態成員也有訪問許可權,類外不能訪問私有成員
//cout << "Person::sOther:" << Person::sOther << endl;
Person p3;
//cout << "p3.sOther:" << p3.sOther << endl;

system("pause");
return EXIT_SUCCESS;
}

靜態成員函式

和靜態成員變數一樣,所有的物件都共享一個靜態成員函式。靜態成員函式主要為了訪問靜態變數,但是,不能訪問普通成員變數。

靜態成員函式主要是拿來管理靜態資料成員。

注意點:

所有物件都共享統一分函式

靜態成員函式只能訪問靜態變數

靜態成員函式的使用和靜態變數是使用相同

靜態成員函式也有訪問許可權

普通成員函式可以訪問靜態成員變數,也可以訪問非靜態成員變數

class Person{
public:
//普通成員函式可以訪問static和non-static成員屬性
void changeParam1(int param){
mParam = param;
sNum = param;
}
//靜態成員函式只能訪問static成員屬性
static void changeParam2(int param){
//mParam = param; //無法訪問
sNum = param;
}
private:
static void changeParam3(int param){
//mParam = param; //無法訪問
sNum = param;
}
public:
int mParam;
static int sNum;
};

//靜態成員屬性類外初始化
int Person::sNum = 0;

int main(){

//1. 類名直接呼叫
Person::changeParam2(100);

//2. 通過物件呼叫
Person p;
p.changeParam2(200);

//3. 靜態成員函式也有訪問許可權
//Person::changeParam3(100); //類外無法訪問私有靜態成員函式
//Person p1;
//p1.changeParam3(200);
return EXIT_SUCCESS;
}