若在建立類別時,欲讓所有該類別物件都「共享」一個變數(意思是說,這個變數在所有該類別物件裡的值都一樣,若經更改,則此變數的值在所有該類別物件中也都更改。這種變數稱為靜態變數),可以使用:
static 變數型態 變數名稱;
(a) 注意:若要讓類別擁有靜態變數(靜態類別成員),則類別應該宣告在主程式之外。若要宣告靜態變數之初始值,也要在主程式之外宣告。如下:
class classA //在主程式外宣告類別classA
{
public:
int a;
classA() // 建構式在此
{a=5;obj_number++;}
static void print_obj_number()
{cout<<obj_number<<endl;} //使用static定義靜態成員函式,專門用來處理靜態類別成員。
private:
static int obj_number; //使用static定義靜態類別成員,也就是靜態變數。
};
int classA::obj_number=0; //使用 變數型態::靜態類別成員名稱=值 來對靜態類別成員進行初始化。這一行也要打在主程式之外。
int main() // 主程式在此
{
classA A1;
A1.print_obj_number(); //顯示1
classA A2;
A1.print_obj_number(); //顯示2
A2.print_obj_number(); //顯示2
classA A3;
A1.print_obj_number(); //顯示3
A2.print_obj_number(); //顯示3
A3.print_obj_number(); //顯示3
}
註一:若沒有對靜態類別成員進行初始化,C++會自動將其初始化為0。
註二:靜態成員函式只能處理靜態類別成員,無法處理非靜態的成員。
註三:常數成員函式可以修改靜態類別成員。但靜態成員函式無法被定義成常數成員函式。
(b)類別中可以定義「靜態常數類別成員」,則對所有以此類別建立的物件而言,此成員的值都一樣,且不能更改。如:
class classA
{
private:
static const int a; //定義靜態常數類別成員
};
const int classA::a=5;
void mian(){
}
留言列表