static聲明的成員或函數,是由類的所有對象公用,不會在每個類保存一個副本,它屬於類本身的,即使沒有實例化對象,仍可以對其訪問或調用。
/*類靜態成員*/
#include <iostream>
using namespace std;
class A{
static int a;//聲明靜態成員
int b;
public:
void set(int i,int j){a=i;/*修改靜態成員a的值*/b=j;}
void show();
};
int A::a;//定義部分
void A::show()
{
cout<<"靜態成員a:"<<a<<endl;
cout<<"非靜態成員b:"<<b<<endl;
}
int main(int argc,char**argv)
{
A aa1,aa2;
aa1.set(11,22);
aa1.show();
cout<<"++++++++++++++++++++++++"<<endl;
aa2.set(33,44);
aa2.show();
cout<<"++++++++++++++++++++++++"<<endl;
aa1.show();//任何對靜態成員a的修改都可在其他對象體現出來
return 0;
}
只需在普通的定義方式前加一個關鍵字static,這樣就成了靜態成員。
但是有點需要注意的是其如何初始化,因為它獨立 於類對象,我們不能在構造函數裡初始化,因為在所有對象實例化之前就應該存在(即使沒有調用構造函數,也應該存在).那在什麼位置初始化呢。其實大家想想類成員函數定義的位置就知道了,很像
也是在外部對其再聲明定義,注意沒有static。
int A::a;
下面的聲明為public並初始化了一個值
/*類靜態成員*/
#include <iostream>
using namespace std;
class A{
int b;
public:
static int a;//聲明靜態成員
void set(int i,int j){a=i;/*修改靜態成員a的值*/b=j;}
void show();
};
int A::a=123;//定義部分
void A::show()
{
cout<<"靜態成員a:"<<a<<endl;
cout<<"非靜態成員b:"<<b<<endl;
}
int main(int argc,char**argv)
{
cout<<A::a<<endl;
A aa1,aa2;
aa1.set(11,22);
aa1.show();
cout<<"++++++++++++++++++++++++"<<endl;
aa2.set(33,44);
aa2.show();
cout<<"++++++++++++++++++++++++"<<endl;
aa1.show();//任何對靜態成員a的修改都可在其他對象體現出來
cout<<"++++++++++++++++++++++++"<<endl;
A::a=100;//public可以直接訪問
aa1.show();
return 0;
}
截圖: