以下代码是否会因缺少虚拟继承而受到负面影响?
如果是这样的话,如果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 ; }
} ;
答案 0 :(得分:4)
假设您想使用A
作为常规界面,如果您不进行虚拟继承,那么您将无法执行此类操作,因为有从子A
到基类D
的两个继承路径:
int main()
{
D d;
const A& a = d;
std::cout << a.foo() << " " << d.foo() << " " << std::endl;
}
如果您不需要使用D
作为A
,那么(A)为什么首先将它作为抽象基础和(B)否,那里不需要继承是虚拟的。
答案 1 :(得分:1)
class B : public virtual A { } ;
class C : public virtual A { } ;
在中间类上使用虚拟继承,您的类D将只有一个A类实例,并且您的代码将编译得很好