通过支配地位继承 - 这真的很糟糕吗?

Shi*_*rik 19 c++ visual-c++ diamond-problem

我是其中一个必须使用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
{

};
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建一个Quux对象,应该期望调用Bar :: foo实现.MSVC非常有帮助:它警告我不够模棱两可?

警告C4250:'Quux':通过优势继承'Bar :: Bar :: foo'

现在我知道我可以用一个pragma来关闭这个警告,但这不是我在这里问的问题.我是否应该在这里听编译器,或者这只是一个非常过分热心的警告?

Pup*_*ppy 11

执行虚拟继承时,不显式覆盖最派生类中的每个成员是一个坏主意.否则,当有人更改从虚拟基础继承的一个基类时,您要求您的代码死于可怕的死亡.没有什么积极错,你的程序将不会崩溃或anysuch,但它是一个维护坏主意.如果你想调用该Bar::foo版本,那么你应该委托给它Quux::foo.

  • 废话.仅仅因为你没有练习某些东西并不能使它变得不健全/不好/无论如何.只要说:"我不习惯." (3认同)
  • "_die一个可怕的死亡_"可怕的死亡=编译器消息,每当你引入歧义.确实太可怕了.(大声笑) (3认同)