虚析构和纯虚函数

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

相关推荐

【数据库】银行/信贷业务测试工作中涉及的数据库表格

银行/信贷业务测试工作中涉及的数据库表格,金融信贷测试人必看!

孤之鹜的博客 1172

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

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

m0_52910424的博客 1112

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。

IT猿手 1367

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

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

qq_49190652的博客 1207

Yolo8行人车辆目标检测实战分享 完整项目代码可直接运行

Yolo8行人车辆目标检测实战分享 完整项目代码可直接运行

1294

ISP算法:自动白平衡(AWB)

1. 为什么要做白平衡? 人类视觉系统具有颜色恒常性特点,一次人类对物体观察不受光源影响。但是Sensor在不同光线下,物体呈现的颜色不同,在晴朗天空下会偏蓝,在烛光下会偏红。如图: 2.什么是自动白平衡? 为了消除光源对于图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。 3. 如何做自动白平衡? 只要乘以一个对角矩阵,便可以进行白平衡...

a200800170331的专栏 1万+

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

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

u011754972的博客 880

C语言实现惯性导航初始对准全部核心代码

惯性导航初始对准包括间接粗对准和卡尔曼滤波精对准,其中。为基于卡尔曼滤波的精对准,其中。

十八与她的博客 2284

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

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

fzzjoy的专栏 1045

【芯片设计- 芯片生产及测试 11.2 -- memory repair 详细介绍】

SoC (System on Chip) 的 Memory Repair 是一种技术,用于检测和修复内存中的损坏单元。由于SoC内部集成了大量的逻辑和存储单元,包括RAM(随机访问存储器)、ROM(只读存储器)、缓存等,在制造过程中,由于工艺偏差或材料缺陷,有可能产生一些损坏的内存位。Memory Repair 机制允许系统检测这些错误并采取措施纠正,以提高芯片的产量和可靠性。

CodingCos的博客 3224

arcgis计算栅格平均值

打开FC栅格数据和非水体矢量数据 利用矢量数据提取对应栅格的非水体部分 2.1打开空间分析工具à提取分析à按掩膜提取 输入对应栅格数据和矢量数据 2.2提取结果如下 进行计算FC平均值 3.1打开空间分析工具à多元分析à波段集统计 输入对应栅格和输出路径 3.2统计结果如下 ...

Z_W_H_的博客 5371

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

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

weixin_56638151的博客 6039

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

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

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

weixin_45725144的博客 1705

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

weixin_45483906的博客 285

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

weixin_48668114的博客 359

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

多态 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、付费专栏及课程。

余额充值