继承的常量函数
const function inherited
>假设我有一个基类 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_;
};
可变变量不会影响类的逻辑恒常性,这一点很重要。如果是这样,你应该重新设计你的设计。
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- constexpr构造函数需要常量成员函数时出现问题
- std::函数常量正确性未遵循
- 具有常量引用参数的函数模板专用化
- constexpr 函数获取常量字符*
- 在定义的函数中使用常量时出错
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- C++ 获取函数在常量引用中按值返回的结果
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 为什么下面带有非常量转换函数的代码没有歧义?
- 与 map 一起使用时复制构造函数常量错误
- 静态函数常量静态成员函数
- 如何在指向常量地址时声明成员函数常量指针
- C++getter函数:常量和非常量
- C++循环中调用伪随机数生成器函数 - 常量种子问题
- 提升::任何构造函数 - 常量类型重载分辨率
- 函数常量返回类型:类型引用的初始化无效
- C++模板通过指针的函数/常量指针的函数进行的部分专用化没有什么不同
- 虚函数常量与虚函数非常量