總結下類的靜態成員的一些基礎知識:
有時候類需要它的一些成員與類本身直接相關,而不是與類的各個物件保持聯絡,此時我們就把該成員定義成類的靜態成員。
1.宣告靜態成員:
在成員的宣告之前加上關鍵字static使得其與類關聯在一起,和其他成員一樣,靜態成員可以使public或paivate的,靜態資料成員的型別可以是常量、引用、指標、類型別等。
class account
//成員函式不用通過作用域運算子就能直接使用靜態成員
static double rate(){}
static void rate(double);
private:
std::string owner;
double amount;
static double interestrate;
static double initrate();
};
注意:1.類的靜態成員存在於任何物件之外,物件中不包含任何靜態資料成員有關的 資料,因此,每個account物件將包含兩個資料成員:owner和amount,只存在乙個interestrate物件而且他被所有account物件共享。
2.靜態成員也不與任何物件繫結在一起,他們不包含this指標,所以靜態成員函式不能被宣告為const,而且不能在靜態成員函式體內使用this指標。
2.使用靜態成員
1.使用作用域運算子直接訪問靜態成員:
2.靜態成員雖不屬於某個物件,但任然可以使用類的物件、引用或指標來訪問靜態成員:
3.成員函式不用通過作用域運算子就能直接使用靜態成員:
double r;
r=account::rate();
account ac1;
account *ac2=&ac1;
r=ac1.rate();
r=ac2->rate();
3.定義靜態成員1.定義靜態成員函式:和其他成員函式一樣,我們既可以在類的內部也可以在類的外部定義靜態成員函式。需要注意的是,當在外部定義靜態成員時,不能重複static關鍵字,它只出現在類內部的宣告語句中。
void account::rate(double newrate)
2.定義靜態資料成員:類的資料成員不屬於類的任何乙個物件,所以並不是在建立類的物件時被定義的,也就表示她們不是由類的建構函式初始化的。一般開說,不能再類的內部初始化靜態成員,而且,必須在類的外部定義和初始化每個靜態資料成員。
double account::interestrate=initrate();
4.靜態成員的類內初始化:通常情況,類的靜態成員不應該在類的內部初始化,然而可以為靜態成員提供const整型型別的類內初始值,不過要求靜態成員必須是字面值常量型別的constexpr。初始值必須是常量表示式。
class account
static void rate(double);
private:
static const int period=30;
double daily_tbl[period];
};
注意:如果靜態成員的應用場景僅限於編譯器可以替換它的值的情況,則乙個初始化的const或const static不需要分別定義,相反,如果他們將用於值不能替換的場景,則該成員必須有一條定義語句。如果在類的內部提供了乙個初始值,則成員的定義不能再指定乙個初始值了。
const int account::period;
5.靜態成員相對於普通成員的不同應用場合:
1:靜態資料成員可以是不完全型別。特別的,靜態資料成員的型別可以就是它所屬的類型別,而非靜態資料成員則受到限制,只能宣告成它所屬類的指標或引用。
class bar
;
2:可以使用靜態成員作為預設實參,非靜態資料成員不能作為預設實參。非靜態資料成員不能作為預設實參,因為他們的值本身屬於物件的一部分,這麼做無法真正提供乙個物件以便從中獲取成員的值,最終引發錯誤。 類靜態成員和類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
類的靜態成員
類的靜態成員存在於任何物件之外,物件中不包含任何與靜態資料成員有關的資料。class account 對於account的每乙個物件豆漿包含owner和amount兩個資料成員,而對於靜態成員interestrate只有乙個,且被所有的物件共享。double r r account rate 2.使...
類的靜態成員
1,static靜態成員,靜態成員 變數 or 函式 可以是public or private,訪問許可權與普通 非static 成員一樣,受到限定符限制 2,靜態成員 變數 or 函式 不與任何物件繫結在一起,而是被所有物件共享 特別是靜態成員函式,它不包含this 指標引數 3.public靜態...