gpt4 book ai didi

c++ - 虚拟继承

转载 作者:IT老高 更新时间:2023-10-28 13:23:49 24 4
gpt4 key购买 nike

“虚拟”继承是什么意思?

看了下面的代码,没看懂下面上下文中关键字virtual的意思:

class A {};
class B : public virtual A;

最佳答案

虚拟继承用于解决DDD问题(Dreadful Diamond on Derivation)。

看下面的例子,你有两个继承自同一个基类的类:

class Base
{

public:

virtual void Ambig();

};

class C : public Base
{

public:

//...

};

class D : public Base
{
public:

//...

};

现在,您要创建一个继承自 C 类和 D 类的新类(它们都继承了 Base::Ambig() 函数):

class Wrong : public C, public D
{

public:

...

};

当您在上面定义“错误”类时,您实际上创建了 DDD(Diamond Derivation 问题),因为您不能调用:

Wrong wrong;
wrong.Ambig();

这是一个模棱两可的函数,因为它被定义了两次:

Wrong::C::Base::Ambig()

还有:

Wrong::D::Base::Ambig()

为了防止这种问题,你应该使用虚拟继承,它会知道引用正确的Ambig()函数。

所以 - 定义:

class C : public virtual Base

class D : public virtual Base

class Right : public C, public D

关于c++ - 虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/419943/

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