帮忙看一下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:55:58
#include "iostream.h"
class A{
public:
A() {cout<<"A::A()"<<endl;}
~A() {cout<<"A::~A()"<<endl;}
};
class B{
public:
B(){cout<<"B::B()"<<endl;}
~B(){cout<<"B::~B()"<<endl;}
};
class C:public B{
public:
C():a(A()),b(B()){} -----这一行什么意思,a(A()),b(B())什么意思
~C(){}
private:
B b;
A a;
};
int main()
{
C c;
}

结果是B::B()
B::B()
A::A()
A::A~()
B::B~()
B::B~()
那等于说C的构造函数里没有内容了?
我发现删除a(A()),b(B())这个初始化列表结果也是一样
这个初始化列表在这里到底起什么作用,可以把构造函数作为初始化参数??
高人来指教!!!!!

Class C 继承于 Class B,构造C类的对象时调用了其基类B的构造函数;

LZ没看懂的那行是C++ 的成员初始化表(其实我也不是很明白这个)。应该是构造C类对象时给的参数是A类和B类的对象构造c时,就生成了a和b。但是由于没有被用到,马上被析构了。

从结果看只有这样解释吧?不过我没有实际运行。只是我的观点:顺序是:构造C类对象c(调用C的基类B的构造函数)——〉成员初始化(构造A a;析构a;构造B b;析构b)。

因此,调用顺序是:B() ;A()
;~A() ;B() ;~B();~B()
(没什么把握的,欢迎拍砖^^)

那行的意思是用临时构造对象初始化a和b
由于C继承与B,所以还会初始化时自动调用基类的构造函数

类成员为对象时会自动调用其默认构造函数