#include <iostream> using namespace std; class BaseClass{ //基类 public: ~BaseClass(){ cout<<"基类BaseClass析构"<<endl; } }; class DerivedClass:public BaseClass{ //派生类 public: ~DerivedClass(){ cout<<"派生类DerivedClass析构"<<endl; } }; void main(){ BaseClass *bp = new DerivedClass(); //基类指针 -> 指向:派生类对象 delete bp; }解释程序输出结果
时间: 2024-02-09 15:11:37 浏览: 82
这段程序的输出结果为:
```
派生类DerivedClass析构
基类BaseClass析构
```
程序中定义了两个类,分别为 `BaseClass` 和 `DerivedClass`,`DerivedClass` 是从 `BaseClass` 派生而来的。在 `main` 函数中,先定义了一个指向 `DerivedClass` 对象的 `BaseClass` 指针 `bp`,然后通过 `delete` 释放了该指针指向的内存空间。
由于 `BaseClass` 的析构函数是虚函数,因此在通过 `delete` 释放对象时,会先调用 `DerivedClass` 的析构函数,再调用 `BaseClass` 的析构函数。因此程序的输出结果中,先输出了派生类 `DerivedClass` 的析构函数的信息,再输出了基类 `BaseClass` 的析构函数的信息。
相关问题
#include <iostream> using namespace std; class BaseClass{ //基类 public: //virtual ~BaseClass(){ ~BaseClass(){ cout<<"基类BaseClass析构"<<endl; } }; class DerivedClass:public BaseClass{ //派生类 public: ~DerivedClass(){ cout<<"派生类DerivedClass析构"<<endl; } }; int main(){ BaseClass *bp = new DerivedClass(); //基类指针 -> 指向:派生类对象 delete bp; }解释程序执行结果
程序的执行结果是:
```
基类BaseClass析构
```
由于在基类的析构函数前没有使用 `virtual` 关键字,因此在程序中删除一个指向派生类对象的基类指针时,只会调用基类的析构函数,而不会调用派生类的析构函数。因此,程序中只会输出基类的析构函数的信息。
#include <iostream> using namespace std; class BaseClass{ //基类 public: virtual ~BaseClass(){ cout<<"基类BaseClass析构"<<endl; } }; class DerivedClass:public BaseClass{ //派生类 public: ~DerivedClass(){ cout<<"派生类DerivedClass析构"<<endl; } }; void main(){ BaseClass *bp = new DerivedClass(); //基类指针 -> 指向:派生类对象 delete bp; }解释程序输出结果
这段程序的输出结果为:
```
派生类DerivedClass析构
基类BaseClass析构
```
程序中定义了两个类,分别为 `BaseClass` 和 `DerivedClass`,`DerivedClass` 是从 `BaseClass` 派生而来的。在 `main` 函数中,先定义了一个指向 `DerivedClass` 对象的 `BaseClass` 指针 `bp`,然后通过 `delete` 释放了该指针指向的内存空间。
由于 `BaseClass` 的析构函数是虚函数,因此在通过 `delete` 释放对象时,会先调用 `DerivedClass` 的析构函数,再调用 `BaseClass` 的析构函数。因此程序的输出结果中,先输出了派生类 `DerivedClass` 的析构函数的信息,再输出了基类 `BaseClass` 的析构函数的信息。
阅读全文