假设我有一个基类foo
class foo {
virtual int get() const = 0;
}
可能还有20个子类foo_1,foo_2 ...继承自foo并采用以下形式:
class foo_1 : public foo {
int get() const { return 1; }
}
...
class foo_20 : public foo {
int get() const { return 20; }
}
突然生活并不那么容易!我有一个类foo_21,必须这样做:
class foo_21 : public foo {
int get() { member_ = false; return 0; }
bool member_;
}
问题是get在基类中被声明为const,我必须改变 子类foo_21中的东西。我怎么能找到解决方法呢?
答案 0 :(得分:6)
您的基本功能不是virtual
,这使得所有这些都具有高度推测性。你的代码应该已经发布了(尽管可能不像你期望的那样)。
您可以使用mutable
成员:
class foo_21 : public foo
{
int get() const { member_ = false; return 0; }
mutable bool member_;
};
重要的是,mutable变量不会影响类的逻辑常量。如果是这样,你应该重新设计你的设计。