一、常对象的概念
常对象就是用 const 修饰的对象,常对象必须初始化且不可被修改。
cpp
//以日期类对象为例
const Date d1(2004, 5, 25);
二、常对象只能调用常函数
常对象只能调用常函数,不能调用其他函数。
以日期类为例,类中有成员函数Print
cpp
//打印
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即可调用。
cpp
//打印
void Print() const
{
cout << _year << "/" << _month << "/" << _day << endl;
}
三、常函数的概念、总结
用const修饰的函数即为常函数(注:const修饰在函数后)
对于类中的成员函数:
如果成员函数对成员变量进行只读操作,那么可以将其改为常函数,常对象与普通对象都可调用。
如果成员函数对成员变量进行读写操作,那么不能改为常函数,只有普通对象可以调用。