const修飾類的成員函式
阿新 • • 發佈:2019-01-06
一、概念
將const修飾的類成員函式稱之為const成員函式。const修飾類成員函式,實際修飾該成員函式隱含的 this 指標,表明在該成員函式中不能對類的任何成員進行修改。
二、 const 成員函式
(1)const 類成員函式中不能修改類的成員變數,const 修飾的是 this 指標指向空間的內容
class Date { public: void GetDay(void); private: int m_year; int m_month; int m_day; }; void GetDay(void) const { return m_day; }
(2)mutable 關鍵字
class Date
{
public:
void GetDay(void);
private:
mutable int m_year;
int m_month;
int m_day;
};
void GetDay(void) const
{
m_year = 2018;
return m_day;
}
三、取地址及const取地址操作符過載
這兩個函式一般不用重新定義 ,編譯器預設生成
class Date { public: Date* operator&(); const Date* Date::operator&() const private: int m_year; int m_month; int m_day; }; Date* Date::operator&() { return this ; } const Date* Date::operator&() const { return this ; }
四、幾個常見的問題
(1)const物件可以呼叫非const成員函式嗎?
(2)非const物件可以呼叫const成員函式嗎?
(3)const成員函式內可以呼叫其它的非const成員函式嗎?
(4)非const成員函式內可以呼叫其它的const成員函式嗎
|
普通型別的成員函式 |
const 型別的成員函式 |
普通物件 |
可以呼叫 |
可以呼叫 |
const 物件 |
不可以呼叫 |
可以呼叫 |
普通型別的成員函式 |
可以呼叫 |
可以呼叫 |
const 型別的成員函式 |
不可以呼叫 |
可以呼叫 |