C++__靜態成員
阿新 • • 發佈:2020-12-29
靜態成員
在類定義中,它的成員(包括成員變數和成員函式),這些成員可以用關鍵字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;
}