一 修飾類
C++中const修飾類主要包括3個(gè)部分:數(shù)據(jù)成員,成員函數(shù),對(duì)象。
-
數(shù)據(jù)成員
const 修飾類的成員變量,表示成員常量,不能被修改,同時(shí)它只能在初始化列表中賦值 (c11 中支持類中初始化)。可被 const 和非 const 成員函數(shù)調(diào)用,而不可以修改。
class A { private: const int num; public: A():num(100){}//在初始化列表中賦值 ~A(); }; class A { private: const int num=200;//在C++11中支持類中初始化 public: A(); void print(){ cout<<num<<endl; } ~A(); };
-
成員函數(shù)
(1)const 修飾函數(shù)
承諾在本函數(shù)內(nèi)部不會(huì)修改類內(nèi)的數(shù)據(jù)成員,也不會(huì)調(diào)用其它非 const 成員函數(shù)(因?yàn)槠渌莄onst成員函數(shù)可能存在修改數(shù)據(jù)成員的嫌疑)
(2)const 修飾函數(shù)位置
const 修飾函數(shù)放在,聲明之后,實(shí)現(xiàn)體之前,大概也沒(méi)有別的地方可以放了。
void dis() const {}
(3)const 構(gòu)成函數(shù)重載
class A { public: A() : x(199), y(299) {} void dis() const //const 對(duì)象調(diào)用時(shí),優(yōu)先調(diào)用 { //input();不能調(diào)用 非const函數(shù),因?yàn)楸竞瘮?shù)不會(huì)修改,無(wú)法保證所調(diào)的函數(shù)也不會(huì)修改 cout << "x " << x << endl; cout << "y " << y << endl; //y =200; const 修飾函數(shù)表示承諾不對(duì)數(shù)據(jù)成員修改。 } void dis() //此時(shí)構(gòu)成重載,非 const 對(duì)象時(shí),優(yōu)先調(diào)用。 { y = 200; input(); cout << "x " << x << endl; cout << "y " << y << endl; } void input() { cin >> y; } private: const int x; int y; };
總結(jié):
- 如果 const 構(gòu)成函數(shù)重載,const 對(duì)象只能調(diào)用 const 函數(shù),非 const 對(duì)象優(yōu)先調(diào)
用非 const 函數(shù)。 - const 函數(shù)只能調(diào)用 const 函數(shù)。非 const 函數(shù)可以調(diào)用 const 函數(shù)。
- 在類外定義的 const 成員函數(shù),在定義和聲明處都需要 const 修飾符。
- 如果 const 構(gòu)成函數(shù)重載,const 對(duì)象只能調(diào)用 const 函數(shù),非 const 對(duì)象優(yōu)先調(diào)
對(duì)象
const A a;
a.dis();
總結(jié):
- const 對(duì)象,只能調(diào)用 const 成員函數(shù)。
- 可訪問(wèn) const 或非 const 數(shù)據(jù)成員,不能修改。