gpt4 book ai didi

c++ - 是否有可能派生使父成员可变?

转载 作者:行者123 更新时间:2023-11-30 02:39:39 27 4
gpt4 key购买 nike

出于好奇,

是否可以派生使父成员可变?有什么合理的方法可以修改以下代码并使其通过编译吗? (保持 foo() 是一个 const 方法并且 int a 在父类 中声明时不是 mutable A)

class A {
protected:
int a;
};

class B : public A {
public:
void foo() const {
a = 10;
}
};

最佳答案

通常,需要修改 const 值意味着您在其他地方有设计错误需要修复...但如果您确实需要,您可以使用 const 强制转换;例如

const_cast<int&>(a) = 10;

鉴于您说您希望将基类本身视为可变的,您可能会考虑在其他地方放弃常量,例如通过创建一个成员函数

A& hack() const { return const_cast<B&>(*this); }

然后你可以将foo实现为

hack().a = 10;

此解决方案的缺点是将 const_cast 隐藏在函数调用后面,因此您需要一些方法来确保阅读您代码的人知道您在做一些“邪恶”的事情(例如通过为函数精心挑选的名称)。然而,这个版本有一些优点:

  • 在我看来,代码更具可读性
  • 它不需要你重复你正在做的对象的类型
  • 它确保您A 的成员执行此操作,而不对B 的成员执行此操作。

关于c++ - 是否有可能派生使父成员可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com