日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的const成员函数

發(fā)布時間:2025/4/5 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的const成员函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1 C++中的const成員函數(shù)
      • 1.1 const成員函數(shù)的使用
      • 1.2 同名的const成員函數(shù)和非const成員函數(shù)構(gòu)成重載關(guān)系
    • 2 mutable關(guān)鍵字

1 C++中的const成員函數(shù)

1.1 const成員函數(shù)的使用

對于一個const對象來說,是不能調(diào)用普通的成員函數(shù)的。因?yàn)?#xff0c;C++認(rèn)為,const(常量)對象,如果允許去調(diào)用普通的成員函數(shù),而這個成員函數(shù)內(nèi)部可能會修改這個對象的數(shù)據(jù)成員!而這將導(dǎo)致const對象不再是const對象!

const對象只能調(diào)用const成員函數(shù), 如果一個成員函數(shù)內(nèi)部,不會修改任何數(shù)據(jù)成員,就把它定義為const成員函數(shù)。const成員函數(shù)內(nèi),不能修改任何數(shù)據(jù)成員!

const成員函數(shù)的定義:

const成員函數(shù)示例:

// test.h class Test { public:int getCount() const; private:int count; };// test.cpp int Test::getCount() const {return count; }

1.2 同名的const成員函數(shù)和非const成員函數(shù)構(gòu)成重載關(guān)系

Class A {int function ();int function () const;};

如上的示例代碼中兩個function函數(shù)構(gòu)成了重載關(guān)系,本質(zhì)是函數(shù)參數(shù)的不同,一個為const類型的this指針傳遞,另一個為非const類型的this指針傳遞。


2 mutable關(guān)鍵字

mutable關(guān)鍵字:

  • mutable是為了突破const函數(shù)的限制而設(shè)計(jì)的。
  • mutable成員變量將永遠(yuǎn)處于可改變的狀態(tài)。
  • mutable在實(shí)際的項(xiàng)目開發(fā)中被嚴(yán)禁濫用。

mutable的深入分析:

  • mutable成員變量破壞了只讀對象的內(nèi)部狀態(tài)。
  • const成員函數(shù)保證只讀對象的狀態(tài)不變性。
  • mutable成員變量的出現(xiàn)無法保證狀態(tài)不變性。

mutable關(guān)鍵可以用來解決如下問題:如何統(tǒng)計(jì)某個成員變量的訪問次數(shù)?

#include <iostream> #include <string>using namespace std;class Test {int m_value;mutable int m_count; public:Test(int value = 0){m_value = value;m_count = 0;}int getValue() const{m_count++;return m_value;}void setValue(int value){m_count++;m_value = value;}int getCount() const{return m_count; }~Test(){delete m_pCount;} };int main(int argc, char *argv[]) {Test t;t.setValue(100);cout << "t.m_value = " << t.getValue() << endl;cout << "t.m_count = " << t.getCount() << endl;const Test ct(200);cout << "ct.m_value = " << ct.getValue() << endl;cout << "ct.m_count = " << ct.getCount() << endl;return 0; }

上述問題還有更好的解決方案:

#include <iostream> #include <string>using namespace std;class Test {int m_value;int * const m_pCount;/* mutable int m_count; */ public:Test(int value = 0) : m_pCount(new int(0)){m_value = value;/* m_count = 0; */}int getValue() const{/* m_count++; */*m_pCount = *m_pCount + 1;return m_value;}void setValue(int value){/* m_count++; */*m_pCount = *m_pCount + 1;m_value = value;}int getCount() const{/* return m_count; */return *m_pCount;}~Test(){delete m_pCount;} };int main(int argc, char *argv[]) {Test t;t.setValue(100);cout << "t.m_value = " << t.getValue() << endl;cout << "t.m_count = " << t.getCount() << endl;const Test ct(200);cout << "ct.m_value = " << ct.getValue() << endl;cout << "ct.m_count = " << ct.getCount() << endl;return 0; }

參考資料:

  • C/C++從入門到精通-高級程序員之路【奇牛學(xué)院】
  • 總結(jié)

    以上是生活随笔為你收集整理的C++中的const成员函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。