【发布时间】:2021-01-29 14:55:42
【问题描述】:
我有一个简单的父类和基类:
class X
{
public:
virtual void Method(){...}
};
class Z : public X
{
public:
virtual void Method(){ X::Method(); }
};
我想重构这个,所以一个新类 Y 位于类层次结构之间,所以 Z : Y、Y : X。 Z::Method() 现在应该调用 Y::Method() 而不是 X::Method()。但是如果我不改变它,它仍然可以编译。事实上,我有很多这样的方法,在重构时很容易错过对X::... 的调用,这会导致难以发现的错误。
有没有办法让编译器提醒我,换句话说,使Y 可以访问X 的方法,但对Z 隐藏?
澄清一下,这可能只是我进行重构以确保不会遗漏任何内容时的临时更改。
【问题讨论】:
-
通常的答案:作曲?还是私人继承?也许有点上下文会很好,为什么你需要这个。
-
@idmean 但是
Y必须为X中的每个方法实现传递方法,它不会覆盖...? -
因此您希望 Y 以 Z 无法再调用它们的方式覆盖 X 中的方法。我说对了吗?
-
如果您希望
X的方法对Y可用但对Z隐藏,您可以将它们从public更改为private但将Y设为@ 987654340@上课。我不建议永久保持这种状态,但如果你的目标是清除这种行为,它就会产生这种效果。 -
@idmean 不,我要确保所有
Z调用X中的超类方法的地方都更新为调用Y。
标签: c++ oop inheritance