1. 程式人生 > >C++中常量成員函式

C++中常量成員函式

可以將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”,因此無法對其進行修改。