防止孙子调用其祖父母的方法

我有一个简单的父类和基类:

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()not X::Method()。但是如果我不改变它,它仍然可以编译。事实上,我有很多这样的方法,X::...在重构时很容易错过调用,这会导致难以发现的错误。

有没有办法让编译器提醒我,换句话说,使X的方法可以访问Y,但隐藏起来Z

澄清一下,这可能只是在我进行重构以确保不会遗漏任何内容时的临时更改。

回答

但是如果我不改变它,它仍然可以编译。事实上,我有很多这样的方法,在重构时很容易错过对 X::... 的调用,这会导致很难找到错误。

澄清一下这可能只是在我进行重构以确保不会遗漏任何内容时的临时更改

正如您所描述的“重构时”,您可以临时添加一个不完整的类型XZ隐藏超类X在层次结构中的位置:

class Z : public Y {
private:
    struct X;  // TODO(Mr. Boy): remove after finishing re-factoring.
public:
    void Method() override { X::Method(); }  // error! Z::X is incomplete
};

任何限定的X::...in使用都Z将失败,因为查找解析为不完整的嵌套类型X


以上是防止孙子调用其祖父母的方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>