const修飾類的成員
阿新 • • 發佈:2018-11-25
一、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成員函式可以呼叫任何成員函式。