c++ - 多重继承会调用哪个实例?

标签 c++ multiple-inheritance virtual-inheritance

我有 2 个基类(B1B2),它们派生自公共(public)基类 (B),它们有一个公共(public)变量 (let: int x; from base B), in 1st base x=0, in the 2nd base x=10 (默认值在 B1,B2 构造函数中给出) .

现在,如果我再派生一个类(类 D:虚拟公共(public) B1、虚拟公共(public) B2{})。

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

提前致谢。

最佳答案

这不是使用虚拟基类的正确位置(如果您不进一步派生)。也许您在混淆概念。

class A;
class B : virtual public A
class C : virtual public A
class D : public B, public C

在这种情况下,将基类设为虚拟化是有意义的,因为当您看透 D 时,有两条通往 A 类的路径。

你的情况是:-

class B1
{
 public:
    int x;
};

class B2
{
  public :
     int x;
};

class D : public B1, publicB2
{
  public :
     void accessBase ()
     {
       this->x;             //error as ambigous.
       this->B1::x;         //fine it's B1's x.
       this->B2::x;         //fine it's B2's x.
     }
};

关于c++ - 多重继承会调用哪个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885996/

相关文章:

c++ - 虚拟继承中最基类是否需要默认ctor?

C++:是一个具有虚拟基础但没有虚拟函数的多态类并且具有VTable吗?

c++ - 虚拟继承,一个类就够了吗?

c++ - C++中的静态变量和普通变量有什么区别?

c++ - 如何在 makefile 中扩展模式规则?

Python:多重继承、复制构造函数、类初始化和()重载

C++ "Virtual functions handling on multiple base classes"

C++从指针调用成员函数在引入参数时调用内存访问冲突

c++ - 如何将ls命令的输出获取到C++中的数组

java - 如何创建一个扩展其他两个接口(interface)的接口(interface)来定义java中的类型