#include<iostream> using namespace std; class B1 { public: B1(int i){cout<<"constructing B1"<<i<<endl;} ~B1(){cout<<"destructing B1"<<endl;}; }; class B2 { public: B2(int j){cout<<"constructing B2"<<j<<endl;} ~B2(){cout<<"destructing B2"<<endl;} }; class B3 { public: B3(){cout<<"constructing B3"<<endl;} ~B3(){cout<<"destructing B3"<<endl;} };class C:public B2,public B1,public B3//基类构造函数按其继承顺序执行 { private: B1 mB1; B2 mB2; B3 mB3; public: C(int a,int b,int c,int d):B1(a),mB2(d),mB1(c),B2(b){ } }; void main() { C obj(1,2,3,4); }解释一下这段代码的原理
时间: 2024-03-31 15:31:55 浏览: 47
使用include <iostream>时一定要加using namespace std
这段代码定义了三个类B1、B2和B3,以及一个派生类C,C继承了B1、B2和B3这三个基类。在C类的构造函数中,对于基类的构造函数调用,按照它们在继承列表中的顺序进行调用。在C类的构造函数中,同时也调用了B1、B2和B3类的构造函数,而对象成员mB1、mB2和mB3则会在C类的构造函数中被初始化。在main函数中,创建了一个C类的对象obj,它的构造函数接收了四个int型参数,这些参数会传递给B1、B2和mB2对象的构造函数进行初始化。当程序运行结束时,析构函数会按照与构造函数相反的顺序被调用,并释放内存。
阅读全文