c++构造和析构问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 20:22:50
#include<iostream.h>
class BASE
{
public:
BASE(int i){cout<<"调用基类BASE的构造函数:"<<i<<endl;}
~BASE(){cout<<"调用基类BASE的析构函数"<<endl;}
/*****************found*****************/
};
class A: public BASE
{
public:
/*****************found*****************/
A(int a,int b):BASE(a),b(b)
{cout<<"调用派生类A的构造函数:"<<a+b<<endl;}
~A(){cout<<"调用派生类A的析构函数"<<endl;}
private:
BASE b;
};
void main()
{
/*****************found*****************/
A obj(1,2);
}
我想问一下为何最后的结果是:
调用基类BASE的构造函数:1
调用基类BASE的构造函数:2
调用派生类A的构造函数:3
调用派生类A的析构函数
调用基类BASE的析构函数
调用基类BASE的析构函数
。高手给出详细的构造与析构顺序好么。。。

A(int a,int b):BASE(a),b(b)
{
...
}
A类的构造函数的初始化列表中调用了2次BASE的构造函数,一次为BASE(a),一次为b(b)(2个b不是同一个b,一个是类成员BASE b,一个是传入的参数int b),然后调用A类的构造函数,析构函数调用顺序相反

构造函数 先定义先构造
析构函数 后定义的先析构