gpt4 book ai didi

c++ - 当基类不包含数据成员时是否仍然需要虚拟继承?

转载 作者:可可西里 更新时间:2023-11-01 16:15:04 24 4
gpt4 key购买 nike

以下代码是否仍会因缺少虚拟继承而受到负面影响?

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

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 ; }
} ;

最佳答案

假设您想将 A 用作通用接口(interface),如果您不将继承设为虚拟,您将无法执行此类操作,因为有 两个 从子 D 到基类 A 的继承路径:

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

std::cout << a.foo() << " " << d.foo() << " " << std::endl;
}

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

关于c++ - 当基类不包含数据成员时是否仍然需要虚拟继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com