虚析构和纯虚函数

C++多态:(1)纯虚函数和抽象类、虚析构 纯虚函数: 使用抽象类的原因:在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容; 纯虚函数语法: virtual 返回值类型 函数名 ( 参数列表 ) = 0; 当类中有了纯虚函数,这个类也称为抽象类; 抽象类的特点: 无法实例化对象; 子类必须重写抽象类中的纯虚函数,否则也属于抽象类,则无法实例化对象; class Base { public: virtual void funcPrint() = 0; }; class Son :public Bas 阅读详情

1. 虚析构

#include <iostream>

using namespace std;

using namespace std;

class CFather
{
public:
	virtual void fun()
	{
		cout << "fun()" << endl;
	}

	virtual void show()
	{
		cout << "CFather  " << "show()" << endl;
	}

	virtual ~CFather()
	{
		cout << "~CFather" << endl;
	}
};

class CSon : public CFather
{
public:
	virtual void show()
	{
		cout << "CSon " << "show()" << endl;
	}
	virtual ~CSon()
	{
		cout << " ~CSon " << endl;
	}
};

class CXiaoMing
{
public:
	~CXiaoMing()
	{
		cout << "~CXiaoMing " << endl;
	}
};

int main()
{
	CFather *fa = new CSon;

	//delete fa; //这里先调用CSon的析构,再调用CFather的析构
	delete (CXiaoMing *)fa;// 1.delete 哪个类型,就调用哪个类的析构,这里把fa强转成了CXiaoMing *类型,
						   //   所以调用了CXiaoMing的析构,没有调用CFather 和CSon的析构
						   // 2. 但是释放的空间仍然是fa指向的空间,不过如果析构函数里有指针释放,由于这里没有调用fa的析构,fa里的指针无法得到释放

	return 0;
}

2. 纯虚函数

#include <iostream>

using namespace std;

//抽象类 :有纯虚函数的类,就叫抽象类
//接口类 :成员函数全是纯虚函数的类,就叫接口类,析构函数也是虚析构
//         最好不要有成员变量,可以有静态常量(static const 或 enum ),不要声明构造函数

class CFather
{
public:
	virtual void fun () = 0; //纯虚函数 : 没有函数实现,有纯虚函数的类,不能实例化对象
};

class CSon : public CFather
{
public:
	void fun() //父类有纯虚函数,子类必须实现这个纯虚函数,子类才能实例化对象,父类仍然不能实例化对象
	{
		cout << "fun" << endl;
	}
};

int main()
{
	//CFather fa;//报错,不能实例化抽象类
	CSon so;
	return 0;
}

 

c++多态定义以及实现原理详解,虚函数、纯虚函数、虚析构、纯虚析构超详细教学,还有图像表示和例子; 阅读详情

相关推荐

Python 静态导入与动态导入

python中模块的静态导入 与 动态导入(运行时指定模块),以及具体对应示例。

慢也好,步子小也好,往前走就好~ 717

C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。

详细讲解C++虚函数,纯虚函数,虚析构,纯虚析构,抽象类和动静态绑定。希望能给您带来帮助。在C++程序中我们经常可以看见关键字virtual来定义一个函数,在这里我们需要知道虚函数的概念:在某基类中声明为virtual并且在它的一个或多个派生类中被重写的成员函数成为虚函数。

m0_52910424的博客 1112

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+

虚函数,虚析构函数,纯虚函数

虚函数:虚函数是运行时多态,若某个基类函数声明为虚函数,则其公有派生类将定义与其基类虚函数原型相同的函数。那么,当基类指针或基类引用操作派生类对象时,系统会自动用派生类中的同名函数代替基类虚函数 基类定义虚函数后,将会一 虚到底——派生类里的同名函数也为虚函数 虚函数前提: (1)基类,派生类中拥有原型相同的成员函数 (2)通过基类指针指向派生类对象时,调用 ...

qq_49190652的博客 1207

Windows安装ros2(Jazzy版本+win10/win11)-1.配置windows终端

更高版本的terminal可能设置里更加丰富, 有默认以管理员身份启动的选项等,可自行配置。打开微软应用商店, 在其中搜索并下载 Terminal 即可(注意别挂梯子)下载并安装, 安装的位置自行替换,建议别放到系统盘中。点击任务栏中的搜索, 输入store。

weixin_48398592的博客 1454

告别sgmediation!Stata中介效应分析新选择:mediation包完整操作指南

本文介绍了Stata中介效应分析从传统sgmediation命令向mediation包的范式升级。重点阐述了如何使用medeff和medsens命令进行更严谨的因果推断,并执行关键的敏感性分析,以评估结果对未观测混杂的稳健性,为学术研究提供发表级的分析工具。

redis7keeper的博客 1160

【c++】28.虚析构函数、纯虚函数

1.虚函数:在类的成员函数前面加virtual关键字的函数; 一般把虚函数定义在public区,方便在主函数中调用 如果一个类有一个虚函数,则该类就有一个虚函数列表,所有该类的对象都共享这个虚函数表;(QT调试过程中显示的是vptr) 如果一个类有一个或者一个以上的虚函数,则该类有且只有一张虚函数表,每个类都只有一个虚函数表,该类的所有对象都共享这张虚函数表 子类的虚函数表中子类的虚函数覆盖父类的虚函数的情况,当子类将父类的虚函数override时,就覆盖了父类的虚函数; 满足override的条件:函数名

u011754972的博客 880

matlab 计算点云粗糙度

A Correspondence Framework for ALS Strip Adjustments based on Variants of the ICP Algorithm

点云侠的博客 1830

虚析构函数和纯虚析构函数

虚析构函数就是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。之所以可以这样是因为虚析构函数会被记录在虚函数表中,如果派生类继承了基类,则派生类的析构函数也会隐式成为虚函数,并且会替换掉父类的析构函数指针。

fzzjoy的专栏 1045

⭐️VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机(完整安装步骤详细图文教程)

Windows XP是微软公司研发的计算机操作系统,于2001年10月25日正式发布。其名字中“XP”的意思来自英文中的“体验”(Experience)。Windows XP使用了Luna图形用户界面和双列开始菜单,提升了系统的安全性和工作性能,提供了WiFi支持,简化了软件的安装和运行,并增加了远程桌面功能。

Python老吕的博客 1万+

【AI智能体】Skills 智能体驱动开发从使用到项目实战详解

Skills 智能体驱动开发从使用到项目实战详解

congge 6612

虚函数与纯虚函数定义及区别,抽象类

虚函数与纯虚函数定义及区别,抽象类、虚函数的实现机制

weixin_56638151的博客 6039

探索 .NET 多版本兼容的精美 WinForms UI 控件库:ReaLTaiizor

你可以根据需要修改主题的颜色方案。// 示例:修改主题颜色设置主色和次色。应用到中。通过继承和重写控件的方法,可以实现自定义样式。// 示例:自定义 MetroButton 样式// 自定义绘制逻辑创建类继承自。重写OnPaint方法,添加自定义绘制逻辑。

墨夶的博客 1509

C++多态:纯虚函数和抽象类、虚析构和纯虚析构

在上述代码中,子类Cat中有在堆区存放的成员变量m_name,当父类中的析构函数不是虚构函数或纯虚析构函数时,delete animal;在使用多态时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码,此时就用到了虚析构函数,只需将父类中的析构函数改为虚析构函数或者纯虚析构函数就可以解决父类指针无法释放子类对象的问题。因此在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的函数,因此可以将虚函数改为纯虚函数。类名::~类名(){}`

weixin_45725144的博客 1705

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

抽象类和纯虚函数,虚析构和纯虚析构

C++的抽象类和纯虚函数类似于java中的接口和接口函数 在C++的程序设计中,常常希望基类只作为其派生类的一个接口,仅相对基类进行向上类型转换,使用它的接口,而又不希望用户实际的创建一个基类的对象,同时创建一个纯虚函数允许接口放置成员原函数,而不一定要提供一段可能对这个接口毫无意义的代码 做到哦这点,可以在基类中加入至少一个纯虚函数,使得基类变为抽象类 1,纯虚函数使用关键字virtual,并在...

weixin_45483906的博客 285

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++系列-纯虚函数,抽象类,虚析构和纯虚析构

C++系列-纯虚函数,抽象类,虚析构和纯虚析构

weixin_48668114的博客 359

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

多态(基本概念+纯虚函数和抽象类+虚析构和纯虚析构)

多态 1 .多态的基本概念 多态是C++面向对象三大特性之一 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运行阶段确定函数地址 下面通过案例进行讲解多态 class Animal { public: //Speak函数就是虚函数 //函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确

qq_44690575的博客 246

菱形继承&多态(重载,重写)&纯虚函数&虚析构和纯虚析构

继承 当菱形继承时,两个父类拥有相同的数据,需要加作用域区分。 菱形继承带来的主要问题是子类继承两份相同的数据导致资源浪费。利用虚继承可以解决菱形继承问题。 多态 静态多态(地址早绑定,在编译阶段确定函数地址) 函数重载-----(**1.**返回值可同可不同,仅返回值不同不算重载 **2.**函数名必须相同 3.参数列表不同,包括个数不同,类型不同,参数排列顺序不同++++重载的函数经过编译器处理重新命名本质上还是不同的函数 ,占用不同的内存和入口地址++++)------ 和 运算符重载,复用

Accowo的博客 798

多态分类,静态联编,动态联编,多态原理解析,纯虚函数和抽象函数,虚析构和纯虚析构,纯虚析构

多态分类: 静态多态:编译时多态(函数重载,运算符重载) 动态多态:运行时多态 静态联编,动态联编: 静态联编:地址早绑定,在编译阶段就绑定好了 动态联编:地址晚绑定,在运行阶段就绑定好了 多态就是父类的引用或者指针指向子类对象 多态原理解析: 当父类有了虚函数之后,内部结构就会发生改变,内部多了一个vfptr(virtual function pointer)虚函数表指针,指...

weixin_43767691的博客 244

C++ 类和对象 多态 纯虚函数和抽象类 虚析构和纯虚析构 案例展示 制作饮品 电脑组装

C++ 类和对象 多态 纯虚函数和抽象类 虚析构和纯虚析构区别与共性 用法 案例展示 制作饮品 电脑组装需求分析及具体实现

UUUUU22的博客 664

C++——虚函数和纯虚函数、抽象类、虚析构和纯虚析构

C++虚函数、纯虚函数、虚析构、纯虚析构,其中虚函数的原理为重点

qq_42106610的博客 9358

3.类和对象-纯虚函数、虚析构和纯虚析构

【代码】3.类和对象-纯虚函数、虚析构和纯虚析构。

ls3614140的博客 268

C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

/父类指针在析构时候 不会调用子类中析构函数,导致子类如果有堆区属性,出现内存泄露。//如果想执行让猫说话,那么这个函数地址就不能提前绑定,需要在运行阶段进行绑定,地址晚绑定。cout << *m_Name << "小猫在说话!// cout << "Animal虚析构函数调用!//2.抽象类的子类 必须重写父类中的纯虚函数,否则也属于抽象类。cout << "func调用" << endl;cout << "动物在说话" << endl;cout << "小猫在说话" << endl;

鲸鱼的博客 1100

C++虚函数,纯虚函数,虚析构和纯虚析构

C++虚函数 定义为虚函数是为了允许用基类的指针来调用子类的这个函数,是需要具体实现的 virtual void funtion1() { cout<<"A::foo() is called"<<endl; } C++纯虚函数 一、定义  纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”  virtual void funtion1()=

demo的博客 423

C++ 多态、虚析构、模板类、常函数、虚继承、虚函数和纯虚函数相关知识和问题总结

常函数const成员函数)是在函数声明时,在函数名之后添加const关键字,表明该函数不会修改对象的任何成员变量。常函数的示例private:int value;public:int getValue() const { // 常函数value = v;// 非常函数,可以修改成员变量作用常函数的主要作用是保证对象的状态不会在函数中被改变,尤其是在使用const对象时。如果一个对象是常量(const),则只能调用常函数,无法调用非常函数。

qq_50373827的博客 1590

虚析构 虚函数,纯虚析构 纯虚函数和抽象类,

1、虚析构 基类指针指向的类型为父类在没有涉及虚析构的时候只能调用父类的析构函数,不能调用子类的析构函数 为了解决这个问题,就要用虚析构(虚函数) 虚析构作用:通过基类指针、引用释放子类的所有空间。 虚析构:在虚析构函数前加virtual修饰 2、纯虚函数和抽象类 纯虚函数格式:virtual void sleep(void) = 0; 如果一个类中拥有纯虚函数那么这个类就是抽象类 抽象类不能实例...

weixin_43680743的博客 362
上一篇: 取虚表的内容
下一篇: Python + Excel 第一节 openpyxl
qiukapi
博客等级 码龄12年 51粉丝 93原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值