继承的常量函数

const function inherited

本文关键字:函数 常量 继承      更新时间:2023-10-16

>假设我有一个基类 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在基类中被声明为常量,我必须改变子类foo_21中的东西。我怎样才能找到绕过它的方法?

你的基函数不是virtual的,这使得所有这些都是高度推测性的。您的代码应该已经在您发布时工作(尽管可能不是您期望的那样)。

您可以使用mutable成员:

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

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