一。成員變量的回顧
1.通過對象名能夠訪問 public 成員變量。
2.每個對象都可以有只屬於自己的成員變量
3.成員變量不能在對象之間共享。
二。類的靜態成員
1. C++中可以定義靜態成員變量和靜態成員函數
2. 靜態成員屬於整個類所有,不需要依賴任何對象。
3. 可以通過類名直接訪問public 靜態成員
4. 可以通過對象名訪問public靜態成員
5. 靜態成員函數可以直接訪問靜態成員變量。
三。靜態成員變量的定義
1. 在定義時直接通過 static 關鍵字修飾
2. 靜態成員變量不依賴於任何對象,需要在類外單獨分配空間。
3. 語法規則:Type ClassName::VarName:
#include <cstdlib> #include <iostream> using namespace std; class Test { private: static int ci; public: static int GetI() { return ci; } static void SetI(int i) { ci = i; } }; int Test::ci = 0; int main(int argc, char *argv[]) { Test::SetI(5); cout<<"Test::ci = " << Test::GetI() << "\n"; cout << "Press the enter key to continue ..."; cin.get(); return EXIT_SUCCESS;
5.從命名空間的角度
a。類的靜態成員只是類這個命名空間中的全局變量和全局函數
b。不同的是,類可以對靜態成員進行訪問權限的限制,而命名空間不行
6.從面向對象的角度
a。類的靜態成員屬於類概念本身
b。類的所有對象共享相同的靜態成員
四。靜態成員函數的定義
1.在定義時直接通過 static 關鍵字修飾
2.其余部分與普通成員函數定義相同
五。靜態成員函數和普通成員函數有什么區別?
c++類對象中的成員變量和成員函數是分開存儲的
1.成員變量
普通成員變量:存儲於對象中,與 struct 變量有相同的內存布局和字節對齊方式
靜態成員變量:存儲於全局數據區中
2.成員函數
存儲於代碼段中
六。
#include <stdio.h> class Test { int i; int j; int k; static int c; public: Test(int i, int j, int k) { this->i = i; this->j = j; this->k = k; } void print() { printf("Object Address: %08X\n", this); printf("&c = %08X, c = %d\n", &c, c); printf("&i = %08X, i = %d\n", &i, i); printf("&j = %08X, j = %d\n", &j, j); printf("&k = %08X, k = %d\n", &k, k); } }; int Test::c; int main() { Test t1(0, 1, 2); Test t2(3, 4, 5); printf("t1 Address: %08X\n", &t1); t1.print(); printf("t2 Address: %08X\n", &t2); t2.print(); printf("Press any key to continue..."); getchar(); return 0; }
六。小結
1.C++類中可以包含屬於類概念的靜態成員
2.靜態成員變量在全局數據區分配空間
3.靜態成員函數不包含隱藏的this指針
4.通過類名可以直接訪問靜態成員