c 類的靜態成員

2022-07-16 07:30:17 字數 1995 閱讀 1967

類的靜態成員(static)

有時候,類需要它的一些成員與類本身直接相關,而不是與類的各個物件保持關聯。

宣告靜態成員

可以使public/private的,型別可以使常量、引用、指標、類型別等。

class

account

/*靜態成員函式

*/static

double rate()

static

void rate(double

);private

: std::

string

owner;

double

amount;

/*靜態資料成員

*/static

double

interestrate;

static

double

initrate();

};

物件中不包含任何與靜態資料成員有關的資料。因此,每個account物件將包含兩個資料成員:owner和amount。只存在乙個interestrate成員,而且它被所有account物件共享。

類似的,靜態成員函式也不與任何物件繫結在一起,他們不包含this指標。作為結果,靜態成員函式不能宣告成const的,而且我們不能再static函式體內使用this指標。

使用類的靜態成員

double

r;r=account::rate(); //

使用作用域運算子訪問靜態成員

/*******************************************

*/account ac1;

account *ac2=&ac1;

r=ac1.rate(); //

通過accountd 的物件或引用訪問

r=ac2->rate(); //

通過指向account 物件的指標訪問

雖然靜態成員不屬於類的某個物件,但仍然可以使用類的物件、引用或者指標來訪問靜態成員。

成員函式不用通過作用域運算子就能直接使用靜態成員(把靜態成員看做類內成員就行)。

定義類靜態成員(static關鍵字只出現在類內部宣告)

靜態成員函式:定義可內可外,外部不寫static,外部必須有作用域運算子(和定義在外部的普通成員函式一樣)

靜態資料成員:定義在外,外部不寫static,外部必須有作用域運算子

/*

靜態成員函式定義

*/void acount::rate(double

newrate)

/*靜態資料成員定義並初始化

*/double account::interestrate=initrate(); //

注意作用域運算子不能忘

類似全域性變數,靜態資料成員定義在任何函式之外。一旦定義,就一直存在於程式的整個生命週期中。

靜態成員的類內初始化??

通常,類的靜態成員不應該在類的內部初始化。然而,可以為靜態成員提供const整數型別的類內初始值,不過要求靜態成員必須是字面值常量型別的constexpr.

class

account;//

乙個不帶初始值的靜態成員的定義

constexpr int account::period; //

初始值在類的定義內提供

即使乙個常量靜態成員在類內部被初始哈了,通常情況下也應該在類的外部定義一下該成員。

靜態成員能用於某些場景,而普通成員不能

1.靜態資料成員可以使不完全型別。特別的,靜態資料成員的型別可以使它所屬的類型別。

2.可以使用靜態資料成員作為預設實參。

class

screen

;

C 類靜態成員與類靜態成員函式

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

C 類靜態成員與類靜態成員函式

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

C 類靜態成員與類靜態成員函式

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