#include <iostream> using namespace std; class A { int a; public: A(){ cout<<"Constructing A"<<endl; } }; class B { public: B(){ cout<<"Constructing B"<<endl;} }; class B1:virtual public B, virtual public A{ public: B1(int i){ cout<<"Constructing B1"<<endl; } }; class B2:public A, virtual public B { public: B2(int j){ cout<<"Constructing B2"<<endl; } }; class D: public B2, public B1 { public: D(int m,int n): B1(m),B2(n){ cout<<"Constructing D"<<endl; } A a; }; int main(){ D d(1,2); }怎么输出
时间: 2024-03-04 20:51:11 浏览: 146
#include <iostream>
输出结果为:
Constructing B
Constructing A
Constructing B1
Constructing A
Constructing B2
Constructing D
Constructing A
解释:
1. 首先,创建了一个名为D的类,它继承了B2和B1两个类。
2. 在创建D对象时,D的构造函数被调用,并且必须调用其直接基类的构造函数来初始化它们。
3. 在调用B1和B2的构造函数时,它们的虚基类A的构造函数也被调用了,因为A是B1和B2的虚基类。
4. 最后,在D的构造函数中,还创建了一个名为a的A类对象,输出了最后一条语句。
因此,输出的顺序为:B->A->B1->A->B2->D->A。
阅读全文