類(lèi)的static靜態(tài)數(shù)據(jù)成員:
class A
{
public:
static int i ;
};
初始化方法: int A::k=100;
//靜態(tài)成員變量的初值只應(yīng)該設(shè)定一次,不要把初始化操作放在類(lèi)的構(gòu)造函數(shù)中,因?yàn)闃?gòu)造函數(shù)可能一再被調(diào)用,也不要放在類(lèi)的頭文件中,因?yàn)轭^文件可能被載入許多地方從而被執(zhí)行許多次。初始化時(shí)必須寫(xiě)上數(shù)據(jù)類(lèi)型(int)和類(lèi)名限定(A::),就像類(lèi)的函數(shù)成員實(shí)現(xiàn)時(shí)必須寫(xiě)上函數(shù)返回值類(lèi)型和類(lèi)名限定一樣。
類(lèi)的static靜態(tài)函數(shù)成員:
class A
{
public:
static void fun( ) ;
};
實(shí)現(xiàn)方法:
void A::fun( )
{cout<<"class A fun()!";}
//在類(lèi)的源文件.cpp里進(jìn)行函數(shù)實(shí)現(xiàn),實(shí)現(xiàn)方法跟普通函數(shù)成員的實(shí)現(xiàn)一樣。類(lèi)的靜態(tài)函數(shù)只能訪問(wèn)該類(lèi)的靜態(tài)數(shù)據(jù)成員或靜態(tài)函數(shù)成員。如果要訪問(wèn)非靜態(tài)數(shù)據(jù)成員必須通過(guò)參數(shù)傳遞得到類(lèi)對(duì)象名,然后通過(guò)對(duì)象名來(lái)訪問(wèn)。如下:
class A
{
public:
static void fun(A a ) ;
int i;
}
;
函數(shù)實(shí)現(xiàn):
void A::fun(A a )
{
a.i=55;
cout<<a.i;
}
類(lèi)的const常數(shù)據(jù)成員:
class A
{
public:
A(int j);
const int i;
}
;
初始化方法:
A::A(int j):i(j)
{ }
//常數(shù)據(jù)成員只能通過(guò)構(gòu)造函數(shù)初始化列表來(lái)獲取初值。常數(shù)據(jù)成員得到初值后不能更新。
類(lèi)的const常函數(shù)成員:
class A
{
public:
A(int j,int m);
const int i;
int q;
static int k;
void fun( ) const ;
}
;
函數(shù)實(shí)現(xiàn):
A::A(int j,int m ):i(j),q(m)
{ }
int A::k=456;
void A::fun( ) const
{ k=789; //正確,能對(duì)靜態(tài)數(shù)據(jù)成員更新。
q=111; //錯(cuò)誤,不能對(duì)普通數(shù)據(jù)成員更新。
i=222; //錯(cuò)誤,常數(shù)據(jù)成員初始化后不能更新。
cout<<i<<endl<<q<<endl<<k; //正確,能訪問(wèn)所有數(shù)據(jù)成員。
}
//常函數(shù)成員能訪問(wèn)常數(shù)據(jù)成員,靜態(tài)數(shù)據(jù)成員和普通數(shù)據(jù)成員,但不能對(duì)常數(shù)據(jù)成員和普通數(shù)據(jù)成員更新。
類(lèi)的const對(duì)象(常對(duì)象)
const A(123,456);
類(lèi)的常對(duì)象只能調(diào)用該類(lèi)的常函數(shù)成員,由于常函數(shù)成員不能對(duì)常數(shù)據(jù)成員和普通數(shù)據(jù)成員更新,只能對(duì)靜態(tài)數(shù)據(jù)成員更新,所以常對(duì)象不能修改自己的數(shù)據(jù)成員,也因此才能叫常對(duì)象。(靜態(tài)成員不屬于一個(gè)對(duì)象而屬于整個(gè)類(lèi)。)
類(lèi)的靜態(tài)常數(shù)據(jù)成員
class A
{
public:
A(int j,int m);
const int i;
int q;
static const int k;
void fun( ) const ;
}
;
函數(shù)實(shí)現(xiàn):
A::A(int j,int m):i(j),q(m)
{ }
const int A::k=789; //類(lèi)的靜態(tài)常數(shù)據(jù)成員類(lèi)似于靜態(tài)數(shù)據(jù)成員賦初值,但要記得前面加const。
void A::fun( ) const
{ k=111; //錯(cuò)誤,靜態(tài)常數(shù)據(jù)成員也是常數(shù)據(jù)成員,常數(shù)據(jù)成員得到初值后不能更新。
cout<<i<<endl<<q<<endl<<k; //正確,能訪問(wèn)靜態(tài)常數(shù)據(jù)成員。
聯(lián)系客服