多态-虚析构和纯虚析构
发布日期:2021-11-20 10:17:51 浏览次数:9 分类:技术文章

本文共 1100 字,大约阅读时间需要 3 分钟。

/*

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

解决办法:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性:

1.可以解决父类指针释放子类对象
2.都需要有具体的函数实现

虚析构和纯虚析构的区别:

1.如果是纯虚析构,则该类属于抽象类,无法实例化对象

虚析构语法:virtual ~类名(){}

纯虚析构语法:virtual ~类名()=0;

类外还要写实现: 类名::~类名(){}

总结:

1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象
2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
3.拥有纯虚析构函数的类也属于抽象类

*/

#include "pch.h"#include 
#include
using namespace std;//虚析构和纯虚析构class Animal {
public: Animal() {
cout << "animal构造" << endl; } //virtual ~Animal() {
// // //1.前面加virtual可以解决父类指针释放子类对象释放不干净的问题 // cout << "animal析构" << endl; //} virtual ~Animal() = 0;//如果没有纯虚析构的具体函数实现会报错 virtual void speak() = 0;};//纯虚析构需要声明和实现,的具体函数实现Animal::~Animal() {
cout << "animal纯虚析构" << endl;}class cat :public Animal {
public: cat(string name) {
m_name = new string(name); }public: virtual void speak() {
cout << "cat" << endl; cout << "name" << *m_name << endl; } string *m_name; ~cat() {
cout << "cat析构" << endl; }};void test01() {
Animal* animal = new cat("tom"); animal->speak(); delete animal;}int main(){
test01();}

转载地址:https://blog.csdn.net/weixin_43223362/article/details/102905251 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:模板-函数模板
下一篇:多态-纯虚函数和抽象类

发表评论

最新留言

不错!
[***.144.177.141]2024年03月07日 13时06分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

ui php h5,画出自己的UI组件的详情 2019-04-21
linux服务文件编写,linux编写systemd下服务脚本 2019-04-21
hdfs linux 目录是否存在,Linux中判断hdfs文件是否存在 2019-04-21
linux学习需要什么基础,学linux需要什么基础? 2019-04-21
linux vim编辑kconfig 无法wq,Linux-4.9.2内核在mini2440上的移植(三)——编译环境测试... 2019-04-21
高斯勒让德在c语言中的程序,c语言:用递归方法编写程序,求n阶勒让德多项式的值... 2019-04-21
c语言单片机电子时钟,新人求个51单片机的电子时钟汇编语言(C语言的还没学到)... 2019-04-21
c++语言文件流,C++文件流 2019-04-21
android 动态毛玻璃,Android毛玻璃背景效果简单实现代码 2019-04-21
android 按钮提示,的Android按钮工具提示 2019-04-21
iphone通讯录 android,3个方法,教你如何快速而又有效的将联系人从iPhone转移到安卓... 2019-04-21
android horizontalscrollview 滑动事件,ScrollView的滑动监听(以HorizontalScrollView为例) 2019-04-21
win7自定义html为桌面,Win7系统自定义桌面主题的方法 2019-04-21
单系统 台电x80pro_台电x80 pro (ID:E3E6)安装remix OS系统教程整理 2019-04-21
linux存储pdf伟岸_python的reportlab库介绍、制作pdf和作图 2019-04-21
安徽信息技术初中会考上机考试模拟_2020年中小学寒假、考试时间定下了! 2019-04-21
ubuntu 退出anaconda环境_从零开始深度学习第15讲:ubuntu16.04 下深度学习开发环境搭建与配置... 2019-04-21
稳定币usda是哪个发行的_武夷山币装帧款曝光,共4款设计,你喜欢哪款? 2019-04-21
可变车道怎么走不违章_走ETC竟比人工车道贵50%!交警:这3点不知道,吃亏的是自己... 2019-04-21
苹果笔记本的end键_笔记本用户的大烦恼:触控板,想好好用你不容易 2019-04-21