禁止任何成员函数在C ++类中更改其数据成员

时间:2009-12-04 22:06:18

标签: c++

那我该怎么做呢?因此,一旦在C ++中初始化了对象,任何成员函数都不能更改其数据成员的值。

5 个答案:

答案 0 :(得分:12)

制作所有成员函数const。这是这项工作的唯一机制,它运作得很好。如果你也让它们private完全被覆盖了。

如果出于某种原因你觉得有必要将它们标记为受保护,那么情况会更复杂。

您需要创建单个字段const,这将要求您通过成员初始化列表或构造函数中的const_cast初始化它们。或者可能是一个可变的ctor,但我不确定是否有这样的事情。

答案 1 :(得分:6)

将成员声明为const。

答案 2 :(得分:2)

您可以简单地将您感兴趣的类的实例声明为const:

const Person p( "fred" );

答案 3 :(得分:1)

作为建议,这些方法应以const为后缀,因为它们不会更改成员(数据)。这可能是多余的,但它会向此类用户发出通知。

如果访问标记为protectedpublic 且成员不是const ,则派生类只能更改父级(超类)的成员。但是,有一些使用指针和转换来改变数据的英雄方法,但原则上不是修改const个对象。

答案 4 :(得分:0)

这样做的方法是将方法声明为const,如下所示:

void f () const;

但是,重要的是要注意标记为可变的成员可能仍然会被更改 - 即使是通过const方法。有关mutable关键字的更多信息,请阅读this