定义常数据成员:
类型 const 对象名;或者 const 类型 对象名;
例如:const clock c1(9,9,9)或者:
clock const c2(10,10,10);
常对象的几条特殊规则:
1、常对象,不能被赋值。
2、常对象,不能访问非常成员函数。
3、常对象,不能被更新。
4、常数据成员,只能通过初始化列表来获得初值。
什么时候用常对象?
1、函数返回值,2、函数形参(常引用)
常成员函数
1、常成员函数,不能修改(更新)对象数据成员的值。
2、常成员函数,不能调用该类中没有用const修饰的成员函数。
3、常对象,只能调用它的常成员函数,而不能调用其他成员函数。
3、const关键字可以用于参与重载函数的区分。
如何定义常成员函数?
返回类型 成员函数名(参数表) const;
综合例题:
class date{
private:
int y,m,d;
public:
int year() const;
int day() const;{return d;}
int month() const;
int day(){return d++;}
int addyear(int i)
{return y+i;}
};
int date::month(){return m;}
//错误,常成员函数实现不能缺少const
int date::year()const{return y++}
//错误:常成员函数不能更新类的数据成员
date const d1;
int j=d1.year;
//正确,常对象可以调用常成员函数
int j=d1.addyear(10);
//错误,常对象不能调用非常成员函数
date d2;
int i=d2.year();
//正确,非常对象可以调用常成员函数。
d2.year()
//正确,非常对象可以调用非常成员函数。