当基类不包含数据成员时,是否还需要虚拟继承?

Gif*_*guy 10 c++ oop inheritance multiple-inheritance virtual-inheritance

缺少虚拟继承会对以下代码产生负面影响吗?

如果是这样,如果class A 确实包含数据成员,那么负面影响是否会与没有虚拟继承的多重继承的负面影响相同(或者更糟)?

class A
{
public :
    virtual ~A ( ) { }
    virtual int foo ( ) const = 0 ;
} ;

class B : public A
{
public :
    virtual ~B ( ) { }
} ;

class C : public A
{
public :
    virtual ~C ( ) { }
} ;

class D : public B , public C
{
public :
    virtual int foo ( ) const { return 12 ; }
} ;
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 5

假设您想用作A通用接口,如果您不将继承设为虚拟,您将无法执行类似的操作,因为从子级到基类有两条继承路径:AD

int main()
{
    D d;
    const A& a = d;

    std::cout << a.foo() << " " << d.foo() << " " << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果您不需要使用 aD作为 an Athen (A) 为什么您首先将它作为抽象基础 (B) 不,继承不需要是虚拟的。