C 系列之類的靜態成員

2021-07-03 06:00:32 字數 2864 閱讀 1581

靜態成員函式中不能呼叫非靜態成員,非靜態成員函式中可以呼叫靜態成員,因為靜態成員在編譯時已經存在,先於物件而存在,因而無法使用物件的成員函式

靜態成員變數使用前必須先初始化,否則會在linker時出錯

靜態成員的特性:不管這個類建立了多少個物件,而其靜態成員只有乙個拷貝(副本),這個拷貝被所有屬於這個類的物件共享。

定義格式:在普通的資料成員定義前加static

static 資料型別 靜態資料成員名;

初始化格式:

資料型別類名::靜態資料成員名 =  初始化值;

公有靜態資料成員的訪問格式:

1. 類名::靜態資料成員名

2. 物件.靜態資料成員名

3. 物件指標->靜態資料成員名

說明:1. 靜態資料成員屬於類,普通資料成員屬於某一物件;

2. 在類中不給靜態資料成員分配記憶體空間;

3. 靜態資料成員與靜態變數一樣,是在編譯時建立並初始化,它在該類的任何物件被建立之前就存在;

4. 靜態資料成員不能在類中進行初始化,必須在類外的其他地方為它提供定義;一般在main()開始之前、類的宣告之後的特殊地帶為它提供定義和初始化;

5. 私有靜態資料成員不能被類外部函式訪問,也不能用物件進行訪問。事實上,私有的任何資料成員和成員函式都不能被類外部函式訪問,也不能用物件進行訪問。

例子:#include

using namespace std; 

class kmyclass 

private: 

static int i;                      //宣告i為私有靜態資料成員 

public: 

static int j;                      //宣告j為公有靜態資料成員 

int geti() 

return i; 

int getj() 

return j; 

int kmyclass::i = 0;                         //靜態資料成員初始化 

int kmyclass::j = 0; 

int main() 

kmyclass::j = 200;                 //公有靜態資料成員可以在物件定義之前被訪問 

cout<<"kmyclass::j ="cout<<"ob1.i = "cout<<"ob1.j = "程式結果:

myclass::j = 200;

ob1.i = 0;

ob1.j = 200;

ob2.i = 0;

ob2.j = 200;

ob1.j = 300;

ob2.j = 300;

定義格式:

static 返回型別靜態成員函式名(形參表);

公有靜態資料成員的訪問格式:

1. 類名::靜態成員函式名(形參表)

2. 物件.靜態成員函式名(形參表)

3. 物件指標->靜態成員函式名(形參表)

說明:1. 靜態成員函式可以定義成內嵌的,也可以在類外定義(在類外定義時,不要用static字首,出於習慣考慮cao);

2. 一般情況下,靜態成員函式主要用來返回全域性變數或同乙個類中的靜態資料成員(當它與靜態資料成員一起使用時,達到了對同乙個類中物件之間共享資料進行維護的目的);

3. 編譯系統將靜態成員函式限定為內部連線,即,與現行檔案相連線的其他檔案中的同名函式不會與該函式發生衝突,維護了該函式使用的安全性,這是使用靜態成員函式的另乙個原因;

4. 在一般的成員函式中,都隱含有乙個this指標,用來指向物件自身,而在靜態成員函式中是沒有this指標的,因為它不與特定的物件相聯絡,呼叫時使用如下格式較好:     類名::靜態成員函式名();

5. 私有靜態成員函式不能被類外部函式和物件訪問。

例子:#include

using namespace std; 

class small_cat 

private: 

double weight; 

static double total_weight; 

static double total_number; 

public: 

small_cat(double w) 

weight = w; 

total_weight += w; 

total_number++; 

void display() 

cout<<"the small_cat weights"coutdouble small_cat::total_number = 0; 

int main() 

small_cat w1(1.8), w2(1.6), w3(1.5); 

w1.display(); 

w1.total_disp(); 

w2.display(); 

w2.total_disp(); 

w3.display(); 

w3.total_disp(); 

small_cat::total_disp(); 

return 0; 

程式結果:

the small_cat weights 1.8pounds

3 small_cat total weight 4.9pounds

the small_cat weights 1.6pounds

3 small_cat total weight 4.9 pounds

the small_cat weights 1.5pounds

3 small_cat total weight 4.9pounds

3 small_cat total weight 4.9pounds

C 之類的靜態成員

類的靜態成員 用關鍵字static宣告 為該類的所有物件共享,靜態資料成員具有靜態生存期。必須在類外定義和初始化,用 來指明所屬的類。include using namespace std class point point point p point intgetx intgety void sh...

學習C 2 之類的靜態成員及靜態成員函式

關鍵字 static 可以用於說明乙個類的成員,靜態成員提供了乙個同類物件的共享機制,把乙個類的成員說明為 static 時,這個類無論有多少個物件被建立,這些物件共享這個 static 成員,靜態成員區域性於類,它不是物件成員。建立與初始化 classx intx s 0 include clas...

c 學習之 類中的常成員與靜態成員

1.類中的所有成員都不能在定義時初始化,只能在建構函式時初始化 2.include using namespace std class circlepool 定義1個圓形水池類circlepool 建構函式 修改3 初始化後,不能再設定或修改price,刪除函式setprice void setpr...