小编Bij*_*gmi的帖子

仅具有一个基本虚拟的多路径继承

据我所知,virtual 确保只有基类属性的一份副本被继承到派生类。在多重继承中,首先调用所有基类的构造函数,然后调用派生类的构造函数。下面的代码中为什么连续调用了B类的构造函数两次?据我了解,输出应该是

B
B1
B2
D
Run Code Online (Sandbox Code Playgroud)

但输出结果是

B
B
B1
B2
D
Run Code Online (Sandbox Code Playgroud)

这是完整的代码。

#include <iostream>

class B
{
public:
    B(){std::cout << "B" << std::endl;}
};

class B1:public B
{
public:
    B1(){std::cout << "B1" << std::endl;}
};

class B2:virtual public B
{
public:
    B2(){std::cout << "B2" << std::endl;}
};

class D:public B1, public B2
{
public:
    D(){std::cout << "D" << std::endl;}
};

int main()
{
    D d1;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance multipath

3
推荐指数
1
解决办法
150
查看次数

标签 统计

c++ ×1

inheritance ×1

multipath ×1