C 靜態資料成員和靜態成員函式

2021-07-24 12:52:02 字數 1496 閱讀 9591

1.如何實現屬於某個類的所有物件共享某個資料?

解決的辦法:

將所要共享的資料說明為全域性變數,但這將破壞資料的封裝性;

較好的解決辦法是將所要共享的資料說明為類的靜態成員。 

2.靜態資料成員是類中所有物件共享的成員,而不是某個物件的成員,所以必須對它初始化,且對它的初始化不能在建構函式中進行;靜態資料成員不屬於任何物件, 它不因物件的建立而產生,也不因物件的析構而刪除,它是類定義的一部分,所以使用靜態資料成員不會破壞類的隱蔽性。

3.定義

靜態資料成員:用關鍵字static宣告,該類的所有物件維護該成員的同乙個拷貝,必須在類外定義和初始化,用::來指明所屬的類;

靜態成員函式:類外**可以使用類名和作用域操作符來呼叫靜態成員函式;靜態成員函式只能引用屬於該類的靜態資料成員和靜態成員函式。

例1:

//具有靜態資料成員和靜態成員函式的point類

#include using namespace std;

class point

//帶引數的建構函式

point(point &p);//拷貝建構函式

static void showcount();//靜態函式成員

void print();

~point() //析構函式

};int point::count = 0;//在類外定義和初始化靜態成員

point::point(point & p)

void point::showcount()

void point::print()

int main()

/*執行結果:

x = 1, y = 2

count = 1

x = 3, y = 5

count = 2

*/

例2:

#include using namespace std;

enum access_value;//定義列舉型別,表示資源的狀態

class access

;void access::set_access(access_value a)//設定資源的狀態

access_value access::get_access()//獲取資源的狀態

access_value access::acs = shared;//初始化靜態資料成員

char* value(int x)//根據數字返回列舉型別

; switch (x) }

int main()

/*執行結果:

obj1 access:shared

obj1 access:unlocked

*/

C 靜態成員函式和靜態資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 靜態資料成員和靜態成員函式

在c 物件導向程式設計過程當中,物件與物件之間的資料不是共享,在設計類的時候,有時候需要一些物件之間共享的資料,除了把所要共享的資料設定為全域性資料或者函式之外,還可以利用c 的靜態機制。1 靜態資料成員 class 類名 靜態資料成員是所有物件共享的,其所佔的記憶體空間不會因為某個物件的產生而分配...

C 靜態成員和靜態成員函式

一 靜態資料成員 類體中的資料成員的宣告前加上static關鍵字,該資料成員就成為了該類的靜態資料成員。和其他資料成員一樣,靜態資料成員也遵守public protected private訪問規則。同時,靜態資料成員還具有以下特點 1 靜態資料成員的定義。靜態資料成員實際是類域中的全域性變數,其定...