常函數(shù)的意義對與普通函數(shù)來說,因為const關鍵字的增加,體現(xiàn)在對類成員的保護上,現(xiàn)在加以講解:
做網(wǎng)站、成都做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)公司已向上千家企業(yè)提供了,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)絡營銷等服務!設計與技術結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。
#includeusing namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleA() const { return a*2; } }; int main() { Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts; return 0; }
結(jié)果:
常函數(shù)->
int doubleA() const 就是在函數(shù)后加const
需要注意的是 :
①:構(gòu)造函數(shù)和析構(gòu)函數(shù)不可以是常函數(shù)
②:常函數(shù)不能對class的類成員進行修改(只能調(diào)用)如下面是不可以的:
但是可以對本函數(shù)內(nèi)部聲明的參數(shù)進行修改
③:常函數(shù)的this指針,有別于普通函數(shù)的this指針
#includeusing namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleA() const { return a*2; } const Ctest* my() const { return this; } Ctest* my1() { return this; } }; int main() { /*Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts;*/ Ctest cts(3); cout << cts.my()->doubleA() << endl; return 0; }
這里有個注意點:常對象只能調(diào)用常對象,如下面是不允許的:
另外 :
#includeusing namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleB() { return a*2; } int doubleA() const { return a*2; } const Ctest* my() const { return this; } Ctest* my1() { return this; } }; int main() { /*Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts;*/ const Ctest cts(3); cout << cts.doubleA() << endl; return 0; }
用 const Ctest cts(3) 也是定義常對象
當然,下面的方案也行:
const Ctest * cts = new Ctest(3); cout << cts->doubleA() << endl;
總結(jié) ,常函數(shù)具有保護類成員的作用。