1. 程式人生 > >const修飾類的成員函式

const修飾類的成員函式

一、概念

將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 型別的成員函式

不可以呼叫

可以呼叫