static靜態成員
1.static靜態數據成員可以被該類所有對象所共享,但其不是每個對象中的成員。
2.static靜態成員在類中聲明之後,還必須要在類的外面定義一次,而且還要用
類名進行限定修飾。
class Account{
public:
static double rate;
}
double Account::rate=0.12;//必須在類的定義之外再定義
3.靜態數據成員的定義不應該放在類聲明的頭文件中,例如上例中class Account
頭文件中,則靜態成員的定義應該這樣寫:
#include“account.h”
double Account::rate=0.12;//在包含類的費內聯成員函數定義的文件中
4.一般的靜態數據成員的定義都應放在類的定義之外,但是如果靜態數據成員是整型
const static成員,則通常在定義時就初始化(初始化時必須要是一個常量表達式)。
class Account {
public :
const static int namesize=16;
const static string name[namesize];
}
const int Account::namesize;//仍然需要在類的外面定義,只是初始化放在類裏面
const string Account::name[namesize]="馬化騰";
本例中,在定義name時直接用了namesize,而並沒有在namesize之前用Account限定
說明他是Account的成員,是因爲在定義name時,前面有了Account修飾了,這樣name
的作用域已經在Account類裏面了,所以他可以直接調用namesize成員。
5.靜態數據成員的訪問除了和一般數據成員的訪問相同外,還支持用類名限定修飾的名字來
直接訪問
if(Account::namesize==16)
{。。。。。。}
6.靜態數據成員的類型可以是所屬的類類型,而非static成員則只能是自身類的指針或引用!
class Bar{
public:
static Bar mem1;//ok
Bar *mem2;// ok
Bar mem3; //error
};
7.static數據成員可以作爲類成員函數的缺省實參,而非static成員則不可以。
class Screen{
public:
Screen&clear(char=bkground);
private:
static const char bkground='#';
}
非static數據成員不能用作默認實參,因爲他的值不能獨立與所屬的對象而使用。
使用非static數據成員作默認實參,將無法提供對象以獲取該成員的值,因而是錯誤的。
8.靜態成員函數 的聲明除了在類體中的函數聲明前加上關鍵字static, 以及不能聲明爲
const 或volatile之外,與非靜態成員函數相同。出現在類體外的函數定義不能指定關
鍵字static。
9.靜態成員函數沒有this指針,任何顯式或隱式的調用this指針都是錯誤的,例如一個static
成員函數中調用了一個非static數據成員都是錯誤的,因爲在調用非static時會隱式的調用
當前對象的this指針,而這個是不允許的。
c++學習筆記--類的static靜態成員
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.