C++中的const成员函数
生活随笔
收集整理的這篇文章主要介紹了
C++中的const成员函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 C++中的const成員函數
- 1.1 const成員函數的使用
- 1.2 同名的const成員函數和非const成員函數構成重載關系
- 2 mutable關鍵字
1 C++中的const成員函數
1.1 const成員函數的使用
對于一個const對象來說,是不能調用普通的成員函數的。因為,C++認為,const(常量)對象,如果允許去調用普通的成員函數,而這個成員函數內部可能會修改這個對象的數據成員!而這將導致const對象不再是const對象!
const對象只能調用const成員函數, 如果一個成員函數內部,不會修改任何數據成員,就把它定義為const成員函數。const成員函數內,不能修改任何數據成員!
const成員函數的定義:
const成員函數示例:
// test.h class Test { public:int getCount() const; private:int count; };// test.cpp int Test::getCount() const {return count; }1.2 同名的const成員函數和非const成員函數構成重載關系
Class A {int function ();int function () const;};如上的示例代碼中兩個function函數構成了重載關系,本質是函數參數的不同,一個為const類型的this指針傳遞,另一個為非const類型的this指針傳遞。
2 mutable關鍵字
mutable關鍵字:
- mutable是為了突破const函數的限制而設計的。
- mutable成員變量將永遠處于可改變的狀態。
- mutable在實際的項目開發中被嚴禁濫用。
mutable的深入分析:
- mutable成員變量破壞了只讀對象的內部狀態。
- const成員函數保證只讀對象的狀態不變性。
- mutable成員變量的出現無法保證狀態不變性。
mutable關鍵可以用來解決如下問題:如何統計某個成員變量的訪問次數?
#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++中的const成员函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的const数据成员
- 下一篇: C、C++中的逻辑运算符