常量对象与常量成员函数来防止修改对象,实现最低权限原则。
在Obj
被定义为常量对象的情况下,下面这条语句是错误的。
错误的原因是常量对象一旦初始化后,其值就再也不能改变。因此,不能通过常量对象调用普通成员函数,因为普通成员函数在执行过程中有可能修改对象的值。
但可以通过常量对象调用常量成员函数。
常量成员函数就是在定义时加了const
关键字的成员函数。
C++不允许在常量对象上调用成员函数,除非成员函数本身也被声明为常量。甚至对不会修改对象的成员函数,也是如此,此外,编译器不允许声明常量的成员函数修改对象。
对一般情况下,通常修改对象的构造函数和析构函数而言,它们不允许被声明成const。
尽管构造函数必须是非常量成员函数,但它仍然可用于初始化常量对象。
初始化列表出现在构造函数的参数表 和 表示构造函数函数体开始的左大括号之间。成员初始化列表用冒号和参数表隔开。
常量数据成员(常量对象和常量变量)以及被声明为引用的数据成员,都必须用成员初始化列表初始化,在构造函数中对这些类型的数据赋值是不允许的。