const函数继承

时间:2012-12-06 18:40:58

标签: c++ function const

假设我有一个基类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中的东西。我怎么能找到解决方法呢?

1 个答案:

答案 0 :(得分:6)

您的基本功能不是virtual,这使得所有这些都具有高度推测性。你的代码应该已经发布了(尽管可能不像你期望的那样)。

您可以使用mutable成员:

class foo_21 : public foo
{
    int get() const { member_ = false; return 0; }
    mutable bool member_;
};

重要的是,mutable变量不会影响类的逻辑常量。如果是这样,你应该重新设计你的设计。