gpt4 book ai didi

c++ - 多重继承

转载 作者:太空狗 更新时间:2023-10-29 20:12:34 27 4
gpt4 key购买 nike

我有 2 个基类(B1 和 B2),它们派生自公共(public)基类(B),它们在第一个中有一个公共(public)变量(让:int x; 来自基 B) base x=0,在第 2 个 base x=10 中(B1、B2 构造函数中给出的默认值)。

视觉上:

class B
{
int x;

protected:

B(int x) : x{x}{}
};

class B1 : public B
{
protected:

B1() : B(0){}
};

class B2 : public B
{
protected:

B2() : B(10){}
};

现在如果我再派生一个类:

class D : virtual public B1, virtual public B2
{
public:

D() : B1{}, B2{}{}
};

根据虚拟概念,这里只有一个 x 拷贝可用,现在如果我尝试使用派生类对象访问 x 值,我将在 O/p 中获得 x 的哪个实例 (x=0x=10),为什么?

最佳答案

为了使用虚拟继承,必须在 B1B2 中将基 B 声明为虚拟。否则,您将拥有 B 的非虚拟继承。

如果你有非虚继承,那么你在D中有两个B基,所以你不能访问x中的D 而不将其限定为 B1::xB2::x

如果你有虚拟继承,那么你只有一个B和一个x,所以对它的两个赋值(x=0x=10) 将按照您执行它们的顺序发生,无论哪个较晚都会覆盖较早的设置的值(很像一个简单的变量 x 有两个作业)。

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

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