首页 > 其他分享 >多态与虚函数表

多态与虚函数表

时间:2023-08-15 23:58:24浏览次数:31  
标签:函数 子类 多态 virtual 父类 重写

是什么

同一操作可以根据对象的类型产生不同的行为

为什么

灵活, 可拓展, 简化代码

怎么样

  1. 在父类函数前加virtual, 在子类中重写这个虚函数. 我们都用父类的指针来指向 new出的不同种类的对象. 此时这个指针很神通广大, 当调用父类的方法时, 会根据子类的种类来调用其函数.

  2. 使用了虚函数表:

  • 每个类都有一个虚函数表, 子类继承父类, 会产生一个新的虚函数表, 但子类虚函数地址还是父类的那个. 重写虚函数, 派生类虚函数表中才放重写的新地址.

  • 每new一个对象, 如果有virtual就会产生一个虚函数指针, 指向对应的虚函数表.

标签:函数,子类,多态,virtual,父类,重写
From: https://www.cnblogs.com/Long23/p/17632754.html

相关文章

  • 开关函数分析
    当输入信号足够大时,晶体二极管的伏安特性可如图近似表示若理想二极管导通压降为0,在u的作用下,I0(t)是导通角为π/2的尖顶余弦脉冲序列,g(t)是导通角为π/2的矩形脉冲序列。......
  • 解决VS2022工程中多个含main()函数源码文件同时编译问题
    做编程练习时,我常常将源码文件放在一个工程中管理,写出的每个源码文件中都包含一个main()函数。于是出现这样的问题:于是生成失败。这是因为,在VS2022中,一个工程里只能有一个入口函数main()。这样的要求对于一个完整的工程来说其实也比较合理,但是对我来说很不方便。于是,通过以......
  • 欧拉函数
    怕自己忘记放道例题201.可见的点-AcWing题库  1#include<bits/stdc++.h>2usingnamespacestd;3#defineintlonglong4#definedoublelongdouble5#defineullunsignedlonglong6#defineQAQ07constintN=1e5+1,inf=0x3f3f3f3f,mod=1e7+......
  • QT:打印当前文件名,行号和函数名称
    定义:#include<QDebug>#definemyDebug()qDebug()<<tr("文件名:")<<__FILE__<<tr("行号:")<<__LINE__<<tr("函数名:")<<__FUNCTION__;在函数中执行myDebug()即可:voidMainWindow::doAction......
  • 无涯教程-Perl - setsockopt函数
    描述此函数将SocketoptionsOPTNAME的值设置为SOCKET上指定级别的OPTVAL值。您需要导入Socket模块,以获取Tabl中显示的OPTNAME的有效值语法以下是此函数的简单语法-setsockoptSOCKET,LEVEL,OPTNAME,OPTVAL返回值如果失败,此函数返回undef;如果成功,则返回1。OPTNAME......
  • Linux之脚本的函数数组
    目录一、shell函数1.1函数的定义二、数组三、冒泡一、shell函数将命令序列按格式写在一起可方便重复使用命令序列shell函数的定义调用函数的方法注意事项直接写函数中调用函数直接写函数名同名函数后一个生效调用函数一定要先定义只要先定义了调用的其他......
  • shell函数与数组
    目录shell函数与数组shell函数函数定义函数递归阶乘题目shell数组冒泡排序shell函数与数组shell函数函数定义将命令序列按格式写在一起可方便重复使用命令序列shell函数定义使用函数可以将大模块分割成小模块函数的组成:函数名、函数体[root@localhost~]#helpfuncti......
  • python中 函数中的self是什么?
      self可视为类的实例,在使用类创建实例时,我们可能需要强制传入一些参数。所以一般在构造函数_init_里给实例的属性赋值。classStudent(obiect):def__init__(self,name,score):self.name=nameself.score=scoredefprint_score(self):......
  • 无涯教程-Perl - setpwent函数
    描述此功能将枚举设置(或重置)到密码条目集的开头。应该在第一次调用getpwent之前调用此函数。语法以下是此函数的简单语法-setpwent返回值此函数不返回任何值。例以下是显示其基本用法的示例代码-#!/usr/bin/perlwhile(($name,$passwd,$uid,$gid,$quota,$com......
  • 排名函数rank、dense_rank、row_number
    rank():返回一个连续的排名值,相同的值将具有相同的排名,可能会有空缺。如果存在两个相同的值,则下一个排名与当前值的排名相同,并且下一个排名将相应地增加。使用场景:当需要按照某个特定的列对数据进行排序,但不需要为相同值分配连续的排名时,可以使用rank()函数。 dense_rank():返回......