c++分别创建B,C,D三个类,D从B类派生,并具有C类对象c1和c2对象成员。验证在创建D类对象时各类的构造函数和析构函数的调用次序。实现代码并写出运行结果。
时间: 2024-05-15 10:20:06 浏览: 17
这个问题是一个编程问题,因此我可以回答。
以下是实现代码和运行结果:
```
#include <iostream>
using namespace std;
class B {
public:
B(){ cout << "B constructor called" << endl; }
~B(){ cout << "B destructor called" << endl; }
};
class C {
public:
C(){ cout << "C constructor called" << endl; }
~C(){ cout << "C destructor called" << endl; }
};
class D : public B {
public:
D() : c1(), c2() { cout << "D constructor called" << endl; }
~D() { cout << "D destructor called" << endl; }
private:
C c1;
C c2;
};
int main(){
D d;
return 0;
}
```
运行结果:
```
B constructor called
C constructor called
C constructor called
D constructor called
D destructor called
C destructor called
C destructor called
B destructor called
```
可以看到,当创建D对象时,B的构造函数首先被调用,然后是C的构造函数,因为D中拥有c1和c2成员对象,所以每个C构造函数都会被调用一次。最后,D的构造函数被调用。
删除对象时,会按相反的顺序调用相应的析构函数。所以,先是D的析构函数,然后是C的析构函数,并且每个C的析构函数都被调用一次,最后是B的析构函数。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)