0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解虚函数及其相关知识点

C语言编程学习基地 来源:C语言编程学习基地 作者: C语言编程 2021-10-13 10:14 次阅读

本期是C++基础语法分享的第七节,今天给大家来分享一下:

(1)虚析构函数;

(2)纯虚函数;

(3)虚函数、纯虚函数;

(4)虚函数指针、虚函数表;

(5)虚继承;

(6)虚继承、虚函数;

(7)模板类、成员模板、虚函数;

(8)抽象类、接口类、聚合类;

虚析构函数

虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。

虚析构函数使用

class Shape{public: Shape(); // 构造函数不能是虚函数 virtual double calcArea(); virtual ~Shape(); // 虚析构函数};class Circle : public Shape // 圆形类{public: virtual double calcArea(); 。。。};int main(){ Shape * shape1 = new Circle(4.0); shape1-》calcArea(); delete shape1; // 因为Shape有虚析构函数,所以delete释放内存时,先调用子类析构函数,再调用基类析构函数,防止内存泄漏。 shape1 = NULL; return 0;}

纯虚函数

纯虚函数是一种特殊的虚函数,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。

virtual int A() = 0;

虚函数、纯虚函数

类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖(override),这样的话,编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。

虚函数在子类里面可以不重写;但纯虚函数必须在子类实现才可以实例化子类。

虚函数的类用于 “实作继承”,继承接口的同时也继承了父类的实现。纯虚函数关注的是接口的统一性,实现由子类完成。

带纯虚函数的类叫抽象类,这种类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。抽象类被继承后,子类可以继续是抽象类,也可以是普通类。

虚基类是虚继承中的基类,暂不做详细说明。

虚函数指针、虚函数表

虚函数指针:在含有虚函数类的对象中,指向虚函数表,在运行时确定。

虚函数表:在程序只读数据段,存放虚函数指针,如果派生类实现了基类的某个虚函数,则在虚表中覆盖原本基类的那个虚函数指针,在编译时根据类的声明创建。

虚继承

虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间、存在二义性)。

底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间,4字节)和虚基类表(不占用类对象的存储空间)(需要强调的是,虚基类依旧会在子类里面存在拷贝,只是仅仅最多存在一份而已,并不是不在子类里面了);当虚继承的子类被当做父类继承时,虚基类指针也会被继承。

实际上,vbptr 指的是虚基类表指针(virtual base table pointer),该指针指向了一个虚基类表(virtual table),虚表中记录了虚基类与本类的偏移地址;通过偏移地址,这样就找到了虚基类成员,而虚继承也不用像普通多继承那样维持着公共基类(虚基类)的两份同样的拷贝,节省了存储空间。

虚继承、虚函数

相同之处:都利用了虚指针(均占用类的存储空间)和虚表(均不占用类的存储空间)

不同之处:

虚继承

(1)虚基类依旧存在继承类中,只占用存储空间

(2)虚基类表存储的是虚基类相对直接继承类的偏移

虚函数

(1)虚函数不占用存储空间

(2)虚函数表存储的是虚函数地址

模板类、成员模板、虚函数

模板类中可以使用虚函数

一个类(无论是普通类还是类模板)的成员模板(本身是模板的成员函数)不能是虚函数

抽象类、接口类、聚合类

抽象类:含有纯虚函数的类

接口类:仅含有纯虚函数的抽象类

聚合类:用户可以直接访问其成员,并且具有特殊的初始化语法形式。满足如下特点:

(1)所有成员都是 public

(2)没有定义任何构造函数

(3)没有类内初始化

(4)没有基类,也没有 virtual 函数

今天的分享就到这里了,大家要好好学C++哟~

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Virtual
    +关注

    关注

    0

    文章

    23

    浏览量

    12276
  • 函数
    +关注

    关注

    3

    文章

    4338

    浏览量

    62738
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70581

原文标题:C++基础语法梳理:虚函数及其相关知识点

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Aigtek功率放大器应用:电感线圈的知识点分享

    电磁驱动是功率放大器的大基础应用领域,其中我们最常见的就是用功放来驱动电感线圈,那么关于电感线圈的这10大知识点你都知道吗?今天Aigtek安泰电子来给大家介绍下电感线圈的基础知识
    的头像 发表于 01-07 15:43 69次阅读
    Aigtek功率放大器应用:电感线圈的<b class='flag-5'>知识点</b>分享

    芯片良率相关知识点详解

    芯片良率(或成品率)是指在芯片制造过程中,从片晶圆上生产出的芯片中,能正常工作的比例,即合格芯片数量与总芯片数量的比率。良率的高低反映了生产工艺的成熟度、设备的精度和稳定性、材料质量以及设计合理性
    的头像 发表于 12-30 10:42 251次阅读
    芯片良率<b class='flag-5'>相关</b><b class='flag-5'>知识点</b><b class='flag-5'>详解</b>

    详解信号的回流路径

    最近在看JT大佬出的本高速PCB设计书籍,看到回流路径这里,让我想到最近两个群里都提到关于这个知识点的问题。书籍很好,但是也会有些疑问,带着这些疑问我也查找了相关资料,我想着尽可能
    的头像 发表于 12-25 10:17 317次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>信号的回流路径

    后悔没有早点看到:天线设计中的知识点

    Cat.1 bis R13架构,天线架构精简为单天线架构,去掉了分集接收天线,因此只需要根天线。   知识点: Cat.1 bis相对于Cat.1的区别是,后者为两根天线(根主天线,
    的头像 发表于 12-24 17:11 345次阅读
    后悔没有早点看到:天线设计中的<b class='flag-5'>知识点</b>!

    单片机中断相关知识点

    ,中断可以让单片机在多个任务之间切换,为每个任务分配定的处理时间,从而提高资源的利用效率。1.2行业现状1.2.1应用现状(1)嵌入式系统:中断机制是嵌入式系统中提升系统效率与响应能力的关键技术。它
    发表于 11-30 09:49

    常用SQL函数及其用法

    的 SQL 函数及其用法: 、聚合函数(Aggregate Functions) 聚合函数
    的头像 发表于 11-19 10:18 331次阅读

    接口测试理论、疑问收录与扩展相关知识点

    本文章使用王者荣耀游戏接口、企业微信接口的展示结合理论知识,讲解什么是接口测试、接口测试理论、疑问收录与扩展相关知识点知识学院,快来起看
    的头像 发表于 11-15 09:12 335次阅读
    接口测试理论、疑问收录与扩展<b class='flag-5'>相关</b><b class='flag-5'>知识点</b>

    智慧公交是什么?带你详解智慧公交的解决方案!

    智慧公交是什么?带你详解智慧公交的解决方案!
    的头像 发表于 11-05 12:26 317次阅读
    智慧公交是什么?<b class='flag-5'>一</b><b class='flag-5'>文</b>带你<b class='flag-5'>详解</b>智慧公交的解决方案!

    CPK为什么要大于1.33?详解CPK计算

    原文标题:CPK为什么要大于1.33?详解CPK计算
    的头像 发表于 11-01 11:08 389次阅读

    模拟电子技术知识点问题总结概览

    给大家分享模拟电子技术知识点问题总结。
    的头像 发表于 05-08 15:16 1186次阅读
    模拟电子技术<b class='flag-5'>知识点</b>问题总结概览

    解读PSpice中的收敛性问题及其相关因素

    的收敛性问题及其与之相关因素,希望对各位有所帮助,文章如有未详尽表述清楚的地方,请指正。在PSpice中进行威廉希尔官方网站 仿真时,常会遇到仿真不收敛的问题(简称收敛性问题)。当
    的头像 发表于 04-13 08:12 2055次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解读PSpice中的收敛性问题<b class='flag-5'>及其</b><b class='flag-5'>相关</b>因素

    篇搞定DCS系统相关知识点

    目标。DCS系统广泛应用于各个行业,如化工、电力、制药等。在这些行业中,DCS系统可以实现对生产过程的集中监控和分散控制,提高生产效率和产品质量,降低能耗和减少环境污染,从而保证产品质量,并确保生产过程的安全可靠。 二.DCS系统知识点
    的头像 发表于 03-26 18:40 936次阅读
    <b class='flag-5'>一</b>篇搞定DCS系统<b class='flag-5'>相关</b><b class='flag-5'>知识点</b>

    【量子计算机重构未来 | 阅读体验】第二章关键知识点

    本帖最后由 oxlm_1 于 2024-3-6 23:20 编辑 之所以将第二章单独拿出来,是因为在阅读过程中,发现第二章知识点较多,理解起来比较耗时间。 第二章的主要知识点: 量子
    发表于 03-06 23:17

    短和断计算运算放大威廉希尔官方网站 详解

    在电子威廉希尔官方网站 理论中,“断”和“短”是分析放大威廉希尔官方网站 尤其是运算放大器威廉希尔官方网站 时的两种基本概念。它们用于简化威廉希尔官方网站 分析过程,帮助我们更好地理解威廉希尔官方网站 的工作原理和设计思路。 断(Virtual Open):“
    的头像 发表于 02-02 16:09 2161次阅读
    <b class='flag-5'>虚</b>短和<b class='flag-5'>虚</b>断计算运算放大威廉希尔官方网站
<b class='flag-5'>详解</b>

    电池电如何解决?手机锂电池“电”现象是什么?

    锂电池电现象及其解决方法。 、手机锂电池“电”现象是什么? 锂电池是目前手机或其他电子设备中最常用的电池类型之,其具有高能量密度、轻
    的头像 发表于 01-10 11:23 1w次阅读