標籤:需要 tchar col iostream 全域變數 mes stat 成員變數 class
一。成員變數的回顧
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.通過類名可以直接存取靜態成員
C++類的靜態成員_12