c++接口与虚析构函数作用

C++虚析构函数,虚函数,纯虚函数,虚函数指针、虚函数表 虚析构函数 虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。 虚析构函数使用 class Shape { public: Shape(); // 构造函数不能是虚函数 virtual double calcArea(); virtual ~Shape(); // 虚析构函数 }; class Circle : public Shape // 圆形类 { public: virtual 阅读详情

接口是一种编程思想,定义了一种编程规范,同时可以增强扩展性(多态),在C++中,某些抽象类也称为接口类,声明一个接口类需要满足以下几个条件:

1、类中所有的成员函数都是纯虚函数,2、没有定义成员变量。

因为接口只负责描述类的行为和功能,不需要实现,而是由它的派生类来实现。

至于普通抽象类,只要有一个成员函数被声明为纯虚函数,那它就是抽象类,这是和接口不一样的地方。

一、接口的实现

class Interface {
public:
	virtual ~Interface() {
		cout << "Interface 析构" << endl;
	}

	virtual void say() = 0; //纯虚函数
};

上面定义了一个接口Interface,可以看到,我们不需要声明它的构造函数,因为抽象类无法被实例化。

接口作用:订制一种规范,即子类必须实现这些接口。

二、声明虚析构函数的目的

1、当被派生类继承后,它的指针指向派生类时,删除它的指针(基类),会先调用子类的析构函数,再调用自己的析构函数。

如下,将接口的虚析构函数注释掉:

#include <iostream>

using namespace std;

class Interface {
public:
	//virtual ~Interface() {
	//	cout << "Interface 析构" << endl;
	//}

	virtual void say() = 0; //纯虚函数
};

class Test : public Interface
{
public:
	Test() {}
	~Test() {
		cout << "Test 析构" << endl;
	}
	virtual void say() {
		cout << "Im Test" << endl;
	}
};

int main()
{
	Interface *f = new Test;
	f->say();
	delete f;

	getchar();
	return 0;
}

输出:

可以发现,无法析构子类Test,会造成内存泄漏。

【智驾与大模型】端到端与多模态大模型的精彩之旅 智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓! 阅读详情

相关推荐

反无人机技术实战解析:从探测到拦截的全方位防御策略

本文深入解析了反无人机(C-UAS)技术的全链条防御策略。从雷达、无线电频谱、光电等多维度探测技术,到数据融合与威胁评估,再到无线电干扰、导航诱骗及物理拦截等核心拦截手段,系统阐述了如何构建从探测到拦截的实战化防御体系,为关键设施、大型活动等场景提供定制化空域安全解决方案。

weixin_29230649的博客 401

C++基类接口设计之虚析构函数

虚析构函数

保持分享欲 465

Android蓝牙Mesh组网实战:从零搭建智能灯光控制系统(附完整代码)

本文详细介绍了基于Android平台开发蓝牙Mesh智能灯光控制系统的完整实战流程。从环境搭建、核心概念解析,到设备扫描配网、网络初始化、模型配置与消息通信,提供了完整的代码实现和调试技巧。重点讲解了如何使用开源Mesh库实现设备发现、分组控制、场景管理等核心功能,并分享了实际项目中遇到的典型问题与解决方案。

weixin_29174013的博客 653

C++接口的设计——析构函数

接口不应该有实体函数,即接口的所有函数都应该是公共的纯虚函数。不过析构函数应该不应该是纯虚函数呢?如果是非纯虚的虚函数,那函数体要写什么呢?答案是什么都不写,内容为空的函数很不简洁,不爽。那就设置成纯虚函数,很遗憾,编译通不过,因为子类会调用父类的析构函数,父类析构函数指针不应该为空。那就考虑设置成普通函数吧,还可以省去声明,因为C++默认实现析构函数!一个显而易见的问题,当delete接口时只是

2369

易语言游戏Call调用避坑指南:主线程绑定与反检测实战

本文详细解析了易语言游戏Call调用中的主线程绑定与反检测技术,帮助开发者避免游戏崩溃和断线问题。通过分析线程检测原理、提供易语言实现方案及高级反检测技巧,如动态线程绑定和上下文伪装,确保Call调用的稳定性和安全性。文章还包含常见问题排查和性能优化建议,适用于游戏辅助开发领域。

weixin_29323365的博客 459

闲鱼x-sign、x-mini-wua、x-umt三字段协同验证机制解析

在移动客户端风控体系中,设备标识与行为签名是保障接口安全的核心技术。x-sign并非传统时间戳+密钥的静态签名,而是融合设备特征、运行时状态与服务端动态因子的多阶段位运算结果;x-mini-wua作为小程序轻量水印,依赖主App注入的短时效sessionKey与截断时间戳;x-umt则通过设备硬件与网络环境联合编码实现强绑定。三者构成‘设备—环境—行为’三位一体的交叉验证链路,广泛应用于电商API防护、二手平台数据采集及自动化运营等场景。本文基于Android/iOS真机逆向与Frida动态分析,揭示其生成

weixin_30457551的博客 422

C++的纯虚函数使用与接口实现

C++的纯虚函数使用与接口实现

高空的博客 2816

lift off工艺为什么常用蒸发的方式镀膜?

电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。

1685

虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。  如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。  所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅

324

SolidWorks与Python二次开发实战:从宏录制到自动化脚本

本文详细介绍了利用Python对SolidWorks进行二次开发的实战方法。通过宏录制获取操作指令,再将其转换为Python脚本,工程师可以高效实现建模、出图等重复任务的自动化,显著提升设计效率。文章涵盖了环境搭建、代码转换、调试技巧及完整实战案例,为工程师提供了从入门到精通的完整路径。

weixin_29082143的博客 945

下采样优化实战:用ADown显著提升YOLOv11的多尺度特征保持能力

ADown 以“可编程梯度信息+多分支特征融合”打破了传统下采样的性能壁垒,为 YOLOv11 带来了多尺度特征的精准传递能力。从原理到代码集成,本教程已为你铺就了一条“小目标检测精度跃升”的实战路径。现在就动手尝试吧——当你看到模型对极小目标也能精准识别,且特征图细节完整时,你会明白这份技术探索的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在下采样领域的边界。

FJN110的博客 421

c++接口类理解

只有纯虚函数 (”=0”) 和静态函数 (除了下文提到的析构函数).没有非静态数据成员.没有定义任何构造函数. 如果有, 也不能带有参数, 并且必须为 protected.如果它是一个子类, 也只能从满足上述条件并以 Interface 为后缀的类继承.接口类不能被直接实例化, 因为它声明了纯虚函数. 为确保接口类的所有实现可被正确销毁, 必须为之声明虚析构函数.

qq_43685921的博客 864

uniapp(全端兼容)-最新详细实现接入腾讯云IM即时通讯教程,uniapp在安卓苹果app端/小程序/h5移动端等集成使用腾讯云im插件,提供消息列表与聊天对话示例,支持发图片/私聊/实时监听消息

uni-app,腾讯云IM,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,im即时通讯,腾讯云IM详细教程,如何接入腾讯IM即时通讯,使用腾讯im有没有插件,怎么使用腾讯云IM插件,tim-wx-sdk,聊天sdk,即时通讯im uniapp私聊/群聊/聊天室,实现IM即时通讯仿微信聊天功能,对接腾讯云IM+音视频,调用腾讯即时通信IM的示例,卡顿很卡不流畅,音视频,全局监听,仿微信IM,uni-huanxin-im,sdk,实现多端实时通

✅ 精选推荐文章 1万+

c++之抽象类的纯虚析构函数

一、抽象类 1、纯虚函数 形式:virtual 函数原型=0; 定义:在定义一个表达抽象概念的基类时,有时无法给出某些函数的具体实现方法,就可以将这些函数声明为纯虚函数。 2.抽象类 定义:声明了纯虚函数的类,都成为抽象类。 主要特点:抽象类只能作为基类来派生新类,不能声明抽象类的对象。(既然都是一个抽象概念了,纯虚函数没有具体实现方法,故不能创造该类的实际的对象) 但是可以声明指向抽象类的指针...

weixin_42579072的博客 4786

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

纯虚函数于纯虚析构函数

多继承带来了一些争议,但是接口继承可以说一种毫无争议的运用了。绝大数面向对象语言都不支持多继承,但是绝大数面向对象对象语言都支持接口的概念, C++中没有接口的概念,但是可以通过纯虚函数实现接口。接口类只是一个功能声明,并不是功能实现,子类需要根据功能说明定义功能实现。纯虚函数:将虚函数等于0 ,实质是将虚函数表的函数入口地址置为NULL;抽象类:一个类中如果有纯虚函数,那么这个类就是一个抽象类;作用:在调用基类的析构函数之前,会先调用子类的析构函。注意:除了析构函数外,其他声明都是纯虚函数。

2401_83430041的博客 596

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

析构函数和虚析构函数

1. 析构函数和虚析构函数       如果基类的析构函数是虚的,那么它的派生类的析构函数都是虚的        这将导致:当派生类析构的时候,它的所有的基类的析构函数都将得到调用        否则,只调用派生类的析构函数(这可能导致基类的某些对象没有得到释放)           所以CObject类的析构函数是虚的,所有由它派生的类析构的时候一级一级的进行,不会造成内存泄漏。

sctq8888的专栏 1617

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++:如何正确的定义一个接口类

C++中如何定义接口类?C++中如何定义标识接口类?

netyeaxi的专栏 3万+

c++接口类实现

欢迎转载,转载请注明原文地址:https://blog.youkuaiyun.com/netyeaxi/article/details/80724557 C++中如何定义接口类? 首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类。接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成。 而对于C++,其接口类一般具有以下特征: 1.最好不要有成员变量,但可以有静态...

harmonyluo的博客 2708

抽象基类和纯虚函数、虚析构函数、纯虚析构函数

在设计时,常常希望基类仅仅作为其派生类的一个接口。这就是说,仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象。纯虚函数(pure virtual function),使得基类称为抽象类(abstract class). 纯虚函数使用关键字 virtual,并在其后面加上=0。如果试图去实例化一个抽象类,编译器则会阻止这种操作。 当继承一个抽象类的时候,必须实现所有的纯虚函数,否则由抽象类派生的类也是一个抽象类。 c++中没有接口的概念,但是可以通过纯虚函数实现接口。虚析构函数作

玖玖玖 671

c++ 编写接口类(interface)举例

接口类简介: 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。 用c++实现接口类时需要注意一下几点: 1、接口类中不应该声明成员变量,静态变量。 2、可以声明静态常量作为接口的返回值状态,这些静态变量需要初始化,访问时需要使用"接口类型::静态常量名"访问 2、定义的接口方法使用vir...

斧冰 6060

【C++虚析构函数深度解析】:为什么纯虚析构函数必须有实现?

解决C++对象析构隐患,深入解析虚析构函数的纯虚实现。适用于抽象基类设计,确保派生类正确释放资源。讲解必须提供定义的原因与实现机制,避免链接错误。掌握这一关键用法,提升程序稳定性,值得收藏。

LiteCode的博客 400

抽象类在C++中的作用

摘要:C++抽象类是面向对象设计的核心工具,通过纯虚函数定义接口规范,强制派生类实现关键行为。抽象类支持多态、依赖倒置和接口隔离原则,确保系统扩展性和可维护性。必须为抽象类提供虚析构函数,以保证通过基类指针删除对象时能正确调用派生类析构函数,避免内存泄漏。虚析构函数会引入虚函数表机制,增加对象大小(通常8字节vptr),但带来的安全性远大于性能开销。最佳实践包括:所有可能被继承的类都应使用虚析构函数,优先使用智能指针管理多态对象,避免不必要虚函数以优化性能。

m0_73482095的博客 874

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

二、虚析构函数 1、什么是虚析构函数? 2、虚析构函数的作用 3、 构造函数 4、为什么构造函数不能是虚函数? 5、构造函数和虚析构函数的联系 6、为什么程序员不能调构造函数,但是可以调用析构函数? 7、虚析构函数产生多态 三、纯虚函数 1、定义: 2、纯虚函数的一般格式 3、例题理解 四、抽象类 1、抽象类的定义 2、抽象类的主要作用 如有错误,敬请指正。您的收藏与点赞都是对我最大的鼓励和支持!

x20020402的博客 2198

C++面向对象多态之虚析构函数和纯虚函数

虚析构函数 如果存在父类指针指向子类对象的情况,应该将析构函数声明为虚函数(虚析构函数) delete父类指针(如下面代码的cat指针)时,才会调用子类的析构函数,保证析构的完整性 #include <iostream> using namespace std; struct Animal { virtual void speak() { cout << "Animal::speak()" << endl; } virtual void run() { c

Arithmetic-logic 374

揭秘C++对象销毁陷阱:虚析构函数的纯虚实现你真的懂吗?

掌握虚析构函数的纯虚实现,有效避免C++对象销毁陷阱。适用于多态基类设计,确保派生类对象正确释放资源。通过纯虚析构函数强制子类重写,结合默认实现防止链接错误,兼具接口规范与安全性。提升程序稳定性,值得收藏。

PixelFlow的博客 955
上一篇: Qt实现 栅格布局效果
下一篇: 说一下#if 1 #else #endif的用法
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值