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

const修飾類的成員

一、const修飾類的成員變數

const修飾的成員變數相當於該變數是一個常量,所以只能在初始化列表上初始化。

class Date{
public:
	Date(int year = 1900, int month = 1)
		:_year(year)
		, _month(month)
		, _day(1)
	{}
private:
	int _year;
	int _month;
	const int _day;
};

二、const修飾成員函式

const修飾類的成員函式,實質上修飾的是成員函式影藏得this指標,表示該成員函式不能對類的成員變數做修改,所以const不可以修飾建構函式和解構函式和賦值運算子過載。this指標型別變為const Date* const this。如果還是想要修改某一個變數,可以在變數前面加一個關鍵字mutable。

//兩個函式形成過載,因為this指標型別不一樣
void display()const
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
	void display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

(1)const物件不可以呼叫非const函式,只能呼叫const成員函式,因為非const函式可能修改物件成員變數值。

(2)非const物件可以呼叫任何成員函式,只不過優先呼叫非const成員函式。

(3)const成員函式不可以呼叫非const成員函式,只能呼叫const成員函式。因為非const成員函式需要this指標。

(4)非const成員函式可以呼叫任何成員函式。