C++类的问题,构造函数和析构函数

2025-02-26 03:19:25
推荐回答(2个)
回答1:

new D(1,2,3);

执行D的构造函数,由于他是以初始化表的形式出现的,同时D继承自C:

D(int i,int j,int k):a(i),b(j),C(k){cout<<"D ";}

依次进行初始化

C(k)   ------> 调用类 C的构造函数C(int k){cout<<"C ";} ----->输出字符 C

a(i)    ------->a是A类的对象引用,调用类 A 的构造函数A(int i){cout<<"A ";} ------>输出字符 A

b(j)    ------->b是B类的对象引用,调用类 B的构造函数B(int j){cout<<"B ";}  ------->输出字符B

cout<<"D ";------------------------------------------------------->输出字符D

delete pc;------>注意pc的声明 :C *pc,他是指向C类对象的指针,delete应该调C类的析构函数

        所以最后输出:   ~C

 

合在一起就是:C A B D ~C

回答2:

正确顺序: C A B D ~C
1、先构造父类,D是C的子类,故先构造C,输出C
2、然后根据参数构造A和B,这两个的构造顺序,是根据在D中a和b定义的顺序定的。先定义a,故先构造A。
3、最后构造D
4、释放空间,所以析构C