C++中常量成員函式
阿新 • • 發佈:2019-01-03
可以將C++中類的成員函式宣告為常量,這種成員函式叫做常量成員函式(const member function)。
1 宣告
將const關鍵字放在類成員函式的引數列表之後,表示該函式為常量成員函式。
class MyClass
{
public:
int consFunc() const;
private:
int m_MyNum;
};
2 定義
可以在類內定義consFunc()函式,也可以在類外定義。不管是在類內還是類外定義該函式,都要使用關鍵字const。
int MyClass::consFunc() const { return this->m_MyNum; }
3 含義
在“2定義”中定義的consFunc()函式中,如果不新增const關鍵字,此時constFunc()是普通的成員函式,此時this的型別是MyClass* const,即this本身是常量,但是其指向的型別是非常量。這就意味著我們不能把this繫結到一個常量物件上。如果要把this繫結到一個常量物件上,必須要把this定義成const MyClass* const,即指向常量的常量。在類成員函式的引數列表之後新增const關鍵字,就相當於把this定義成const MyClass* const。
4 注意事項
4.1 常量物件必須呼叫常量成員函式
正如“3 含義”中提到的,如果通過常量物件呼叫類的成員函式,該成員函式必須是常量成員函式。
4.2 非常量物件可以呼叫常量成員函式
因為可以將一個非常量賦值給常量,所以非常量物件可以呼叫常量成員函式。
MyClass myclass;
myclass.consFunc();
4.3 常量成員函式中不能修改成員變數
因為常量成員函式中的this型別是const MyClass* const,所以不能通過this來修改成員變數。
如果consFunc()函式的定義改為如下
int MyClass::consFunc() const
{
return this->m_MyNum++;
}
則此時程式會報錯,error C3490: 由於正在通過常量物件訪問“m_MyNum”,因此無法對其進行修改。