多态与非多态类型区别_多态和非多态-程序员宅基地

技术标签: c++  

多态类型:

含有虚函数的类型,就可称为多态。(同 含有纯虚函数就可称为抽象类)
多态体现为:基类指针对基函数调用时,实现的是派生类的函数实现
多态类型适合被继承,非多态类型不适合被继承,原因:

  • 对基态虚函数可实现覆盖是继承的最大优势和特征。非多态类型被继承后,通过基类指针只能实现基类函数的特性,失去了继承原本的意义,且组合类同样可以实现
  • 对于基类指针调用析构函数时,非多态类的派生类析构函数无法实现,造成内存泄漏
  • (因此一般不论多态与否,都将析构函数定义为虚函数)

怎样定义一个非多态类型?

1.每个函数都具有清晰明确的实现,不需要任何特殊处理,普遍适用,不需要派生类特殊实现
2.一般不希望其它类对它进行继承

typeid 用于获取运行时的动态类型

若是非多态,用基类指针或对象替代 传入typeid()时,不会有额外数值计算,只是简单的获取静态类型信息
传入的是多态类型对象的基类指针的解引用时(不包括指针)运行时会进行动态识别,因此返回的可能是派生类的类型

虚函数的动态绑定

每个类内部存放一个虚表,存放各种虚函数的指针,基类函数放在最前面,因此在基类和派生类虚表中具有相同的位置
派生类构造函数执行时,首先是基类构造函数,同时虚表指针指向基类的虚表,然后再构造派生类,虚表指针指向派生类虚表,这就解释了为什么最开始调用的是基类构造函数而不是派生类构造函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45886502/article/details/105565521

智能推荐

使用QEMU模拟搭建ARM开发平台(三)——添加SCSI和MTD以及NAND flash支持_qemu仿真nandflash-程序员宅基地

文章浏览阅读5k次。使用versatile_defconfig编译的内核不能满足要求,现在,添加SCSI磁盘,MTD以及NAND flash的支持。交叉编译linux内核下载codesourcery的交叉编译工具链 https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite, 选择目标OS为GNU/Linux_qemu仿真nandflash

git工具的使用方法以及与snv的区别_snv git-程序员宅基地

文章浏览阅读371次。给大家推荐一个廖雪峰老师讲解git的网站:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000一、SVN与git的区别 SVN是“集成式”管理方式,所有的“版本控制器”都在中央服务器上,每个开发人员的的计算机都要连接到中央服务器上才能进行合作开发。开发人员一般只能在公司才能进行开发(因..._snv git

Centos7安装部署RabbitMQ及配置-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏4次。1 简介RabbitMQ是一个开源的免费的消息队列系统,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。它是用Erlang编写的,并实现了高级消息队列协议(AMQP)。2 安装部署2.1 安装EPEL存储库和Erlang安装RabbitMQ是用Erlang语言编写的,在本教程中我们将安装最新版本的Erlang到服务器中。 Erlang在默认的YUM存储库中不可用,因此...

ubuntu下搭建ad-hoc网络实现多台设备进行网络通信(通过图形界面+超级详细教程)_测试ad-hoc无线网络的连通性-程序员宅基地

文章浏览阅读3.2k次,点赞9次,收藏20次。最近实验室做的一些工作需要使用lattepanda(类似增强的树莓派)并且使用其无线网卡的ad-hoc模式,并且实现多台lattepanda之间实现网络通信。_测试ad-hoc无线网络的连通性

ubuntu 禁用透明大页_linux 关闭透明大页-程序员宅基地

文章浏览阅读261次。oracle 建议关闭透明大页[root@ht01 ~]# cat /etc/grub.conf# grub.conf generated by anaconda## Note that you do not have to rerun grub after making changes to this file# NOTICE: You have a /boot partition. Thi..._ubuntu grub 关闭透明大页

deepin v20 beta 安装 Vmware 15步骤_deepin安装vmware15-程序员宅基地

文章浏览阅读1.3k次。deepin v20默认是装不了vmware15的,因为vm15 依赖 gcc6 而deepin v20 默认是gcc8,版本太高了,所以要先安装gcc6,但是默认的源里没有gcc6及以下版本,所以要从换源开始。第一步 换阿里云的源1:快捷键“Ctrl + Alt + T”打开命令输入框,输入sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak备份当前配置回车后 需要你输入你的开机密码再输入sudo dedit /..._deepin安装vmware15

随便推点

测量地磁场实验-居家物理实验(版)_地磁场测量实验报告-程序员宅基地

文章浏览阅读1.9w次,点赞8次,收藏46次。实验项目名称:测量地磁场实验 实验目的:1.了解地磁场分布,并研究测量地磁场的方法2.利用智能手机测量地磁场的水平分量,垂直分量和磁倾角实验原理和实验内容:地球本身具有磁性,所以地球和近地之间存在着磁场,叫做地磁场。地磁场的强度和方向随地点(甚至随时间)而异。地磁场的北极,南极分别在地理南极,北极附近,批次并不重合,而且两者之间的偏差随时间不断在缓慢变化。在一个不太大的范围内,地磁场基本上是均匀的,可用三个参量来表示地磁场的方向和大小。仪器..._地磁场测量实验报告

python_boost_模板代码,_def_readonly-程序员宅基地

文章浏览阅读110次。namespace boost { namespace python{ template <class T , class Bases = bases<> , class HeldType = T , class NonCopyable = unspecified > class c..._def_readonly

风格迁移(CycleGAN)_cyclegan 指标-程序员宅基地

文章浏览阅读3.9k次。文章目录概述CycleGANCycleGAN有两个Generator网络CycleGAN有两个Discriminator网络CycleGAN的网络结构应用参考概述Cycle-Consistent Adversarial Networks(CycleGAN)是一个新颖的方法,它能将图像从源域映射到目标域b。CycleGANs的一个很酷的功能是它不需要训练数据配对就能产生惊人的风格传递的结果。在许多风格迁移的应用中,成对数据是训练所必需的。配对CycleGAN不需要配对数据输入到模型中无需_cyclegan 指标

Unity中,使“鼠标点击”穿透UI,触发物体事件_unity ui穿透-程序员宅基地

文章浏览阅读1.2w次,点赞9次,收藏78次。Unity中,使“鼠标点击”穿透UI,触发物体事件_unity ui穿透

漫步线性代数二十一——行列式引言_将visa换成avis需要多少次对换,是奇数吗-程序员宅基地

文章浏览阅读1k次。在一百年前,行列式不是线性代数的中心,但是数学的方向一直在变换!毕竟,仅仅一个数就能告诉我们许多矩阵的信息。对行列式的一种理解是:它对A−1,A−1bA^{-1},A^{-1}b的每一项给出了明确的方式,这个公式不会随着我们的计算方法而改变。事实上,我们可以将行列式看成n×nn\times n矩阵最有效的替代公式,这个公式说明了A−1A^{-1}如何依赖AA的n2n^2个元素,以及这些元素变化时这个_将visa换成avis需要多少次对换,是奇数吗

Linux系统的ftp服务(ftp搭建及相关用法)_liunx系统ftp服务器架构设计-程序员宅基地

文章浏览阅读647次。部署FTP服务FTP(文本传输协议)是INTERNET上仍常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器进行传输的简单方法。FTP服务器包的名称为vsftpd,它代表very secure file transferprotocol damon 服务器名称也叫做vsftpd.默认配置文件让匿名用户(anoymous用户)只能呢个下在位于chroot 目录中的内容。/var/f..._liunx系统ftp服务器架构设计

推荐文章

热门文章

相关标签