0

假设我有一个基类 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 中更改一些内容。我怎么能找到绕过它的方法?

4

1 回答 1

7

您的基本功能 is not virtual,这使得所有这些都具有高度投机性。您的代码应该已经在您发布它时工作(尽管可能不像您期望的那样)。

您可以使用mutable成员:

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

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

于 2012-12-06T18:42:28.887 回答