那我该怎么做呢?因此,一旦在C ++中初始化了对象,任何成员函数都不能更改其数据成员的值。
答案 0 :(得分:12)
制作所有成员函数const
。这是这项工作的唯一机制,它运作得很好。如果你也让它们private
完全被覆盖了。
如果出于某种原因你觉得有必要将它们标记为受保护,那么情况会更复杂。
您需要创建单个字段const
,这将要求您通过成员初始化列表或构造函数中的const_cast
初始化它们。或者可能是一个可变的ctor,但我不确定是否有这样的事情。
答案 1 :(得分:6)
将成员声明为const。
答案 2 :(得分:2)
您可以简单地将您感兴趣的类的实例声明为const:
const Person p( "fred" );
答案 3 :(得分:1)
作为建议,这些方法应以const
为后缀,因为它们不会更改成员(数据)。这可能是多余的,但它会向此类用户发出通知。
如果访问标记为protected
或public
且成员不是const
,则派生类只能更改父级(超类)的成员。但是,有一些使用指针和转换来改变数据的英雄方法,但原则上不是修改const
个对象。
答案 4 :(得分:0)
这样做的方法是将方法声明为const,如下所示:
void f () const;
但是,重要的是要注意标记为可变的成员可能仍然会被更改 - 即使是通过const方法。有关mutable关键字的更多信息,请阅读this。