多态-虚析构和纯虚析构
发布日期: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
高斯勒让德在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
win7自定义html为桌面,Win7系统自定义桌面主题的方法
2019-04-21
linux存储pdf伟岸_python的reportlab库介绍、制作pdf和作图
2019-04-21
安徽信息技术初中会考上机考试模拟_2020年中小学寒假、考试时间定下了!
2019-04-21
稳定币usda是哪个发行的_武夷山币装帧款曝光,共4款设计,你喜欢哪款?
2019-04-21
苹果笔记本的end键_笔记本用户的大烦恼:触控板,想好好用你不容易
2019-04-21