c – 主导地位的继承 – 真的很糟糕吗?

我是其中一个人必须得到他们的代码编译与0警告。通常我尊重编译器,如果它给我一个警告,我把它作为一个标志,我应该接触我的代码一点。如果我不得不告诉编译器忽略一个给定的警告,我抽搐了一下。

但是这个我似乎无法摆脱,而且从我可以说我没有做任何“坏”的事情。有人认为这是一个糟糕的设计吗?我看不到任何特别令人讨厌的东西(除了“邪恶的钻石”),但它是完全有效和有用的代码。但它会生成(在MSVC中)2级警告!

class IFoo
{
public:
    virtual void foo() = 0;
};

class Bar : public virtual IFoo
{
public:
    virtual void foo() { std::cout << "Hello, world!"; }
};

class Baz : public virtual IFoo
{

};

class Quux : public Bar, public Baz
{

};

现在如果我创建一个Quux对象,应该会调用Bar :: foo的实现。 MSVC是非常有帮助的:它警告我不够暧昧吗?

warning C4250: ‘Quux’ : inherits ‘Bar::Bar::foo’ via dominance

现在我认识到我可以用一个实用的语言把这个警告关掉,但这不是我在这里问的问题。有没有理由我应该在这里听编译器,还是这个非常过分的警告?

当执行虚拟继承时,不明确地覆盖最多派生类中的每个成员是一个坏主意。否则,如果有人更改了从虚拟基础继承的基类之一,则会要求您的代码死亡。没有什么主动的错误,你的程序不会崩溃或任何,但这是一个可维护性的坏主意。如果你想调用Bar :: foo版本,那么你应该在Quux :: foo中委托它。
http://stackoverflow.com/questions/7071671/inheritance-by-dominance-is-it-really-bad

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 主导地位的继承 – 真的很糟糕吗?