一、常對象的概念
常對象就是用 const 修飾的對象,常對象必須初始化且不可被修改。
//以日期類對象為例
const Date d1(2004, 5, 25);
二、常對象只能調用常函數
常對象只能調用常函數,不能調用其他函數。
以日期類為例,類中有成員函數Print
//打印
void Print()
{cout << _year << "/" << _month << "/" << _day << endl;
}
const Date d1(2004, 5, 25);
d1.Print();
該代碼報錯,因為常對象只能調用常函數。分析深層次原因就是,Print函數中有隱藏形參this指針,其類型是Date* const this,是可讀可寫的;而常對象d1的類型是const Date,是只讀的。如果將常對象d1調用Print函數,會發生權限的放大:原本只讀的對象變為可讀可寫的對象,顯然是非法的。
將Print函數改為常函數,常對象d1即可調用。
//打印
void Print() const
{cout << _year << "/" << _month << "/" << _day << endl;
}
?三、常函數的概念、總結
用const修飾的函數即為常函數(注:const修飾在函數后)
對于類中的成員函數:
如果成員函數對成員變量進行只讀操作,那么可以將其改為常函數,常對象與普通對象都可調用。
如果成員函數對成員變量進行讀寫操作,那么不能改為常函數,只有普通對象可以調用。