c++ - C++虚函数继承
问题描述
#include <iostream>
class a{
public:
a(){};
virtual ~a(){
std::cout << "del class a";
}
};
class b: public a{
public:
~b(){
std::cout << "del class b";
}
};
int main(){
a *pa;
pa = new b;
delete pa;
}
嗨,我对 C++ 相当陌生。看上面的代码示例,class b
没有虚析构函数,但是当程序执行时,输出的是
del class b
then del class a
。
我想知道为什么会这样,因为我没有在class b
. 这是否意味着通过将基析构函数声明为虚拟,派生类的“虚拟性”是隐含的?谢谢。
解决方案
即使析构函数不是继承的,如果基类声明它的析构函数是虚拟的,派生的析构函数总是会覆盖它。这使得通过指向基址的指针删除动态分配的多态类型对象成为可能。
推荐阅读
- reactjs - react-navigation 5.x:TS2345:“...”类型的参数不可分配给“...”类型的参数
- node.js - 嵌套 MongoDB 文档问题(Mongoose 和 Node Js)
- c - 如何检查递归二项式系数算法是否溢出
- refactoring - 将 ST 计算移至子计算
- python - 从 Python 连接到远程桌面上的 MS SQL Server
- c++ - std::vector 未调整大小以在一定数量的条目后容纳更多条目 C++
- angular - Angular 2+ navigation with mat-tab-nav-bar - accessibility
- c# - Blazor 服务器如何在后端工作?
- php - 以选择形式显示所有房间
- html - 如何更改 HTML URL /folder/file.html