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)
假设您想用作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) 不,继承不需要是虚拟的。