当前位置: 首页 > news >正文

C++虚函数易错点整理

目录

一、this指针

二、virtual关键字的使用

三、虚函数的定义

四、虚函数的使用情景

五、重载、重写以及重定义

六、赋值兼容

七、抽象类

八、虚表


一、this指针

        静态成员函数没有this指针,也不支持重写,static和virtual是不能同时用的;静态成员函数属于整个类,可以用类域::成员函数名的方式访问,因为没有隐藏的this指针,因此也就无法拿到虚表,也就无法实现多态

二、virtual关键字的使用

        ·virtual用于声明虚函数,只在声明时加上,在类外定义时不能加

        ·想要实现多态的话,virtual就一定要加在父类的相应函数前,但是可以在子类的相应函数前不加,反过来加是不可以的

三、虚函数的定义

        ·虚函数只能是成员函数,友元函数不能作为虚函数

四、虚函数的使用情景

        ·使用虚函数是为了实现多态,因此如果不需要实现多态的话就不需要写虚函数,因为多态也会有额外的消耗,比如虚函数表这个函数指针数组

        ·子类的虚函数放在private里面,并不影响多态的实现,因为多态仅仅是用子类函数的地址覆盖虚表,并不该表调用的位置

五、重载、重写以及重定义

        ·重载是在相同作用域中的同名函数,拥有不同的参数(类型或者是数量不同),返回类型可以不同,来进行行为的函数

        ·重写就是覆盖,针对多态,重定义就是隐藏,两者都是要在同一个继承体系当中,但是父类和子类都有自己独立的作用域,因此重写和重定义不是重载;而重写要求三相同(函数名、返回类型、参数),但是协变除外(可以返回基类或子类的指针或者引用),在以上体系中只要不构成覆盖,就构成隐藏

六、赋值兼容

        ·即使已经将子类赋值给父类,但只要使用父类对象调用的方法就都是父类的方法

七、抽象类

        ·抽象类不能实例化出对象,因此将其作为实参、函数参数列表成员、返回值等都是不可以的;但是抽象类可以作为指针,并应用与将父类指针指向子类以实现多态

八、虚表

        ·一个类的不同成员共享该类的虚表,一个类可以有多个虚表(在多继承的情况下)

        ·父类函数和子类函数的前四个字节都用于存储一个数组指针,这个指针指向了各自的虚表,两个虚表中的内容不同(如果子类重写了虚函数的话)

        ·在多继承的情况下,对于子类而言,有几个父类就有几个虚表,但是他所新写的虚函数只会放在第一个虚表后面,其他的虚表也不会存储,因为存储了也不能调用

http://www.xdnf.cn/news/1157221.html

相关文章:

  • Python dataclass 高阶用法与技巧
  • springboot-profile
  • Direct3D 11学习(一)
  • 数学专业转行做大数据容易吗?需要补什么?
  • Web服务压力测试工具hey学习一:使用方法
  • 如何解决pip安装报错error subprocess-exited-with-error问题
  • 力扣面试150题--搜索插入位置
  • 30天打牢数模基础-灰色预测模型讲解
  • BLIP、InternVL Series(下)
  • Eureka+LoadBalancer实现服务注册与发现
  • JavaScript 对象操作、继承与模块化实现
  • RCE随笔(1)
  • 使用 Pyecharts 绘制精美饼状图:从基础到高级技巧
  • 【LeetCode 热题 100】236. 二叉树的最近公共祖先——DFS
  • Effective Python 条款13:通过带星号的unpacking操作来捕获多个元素,不要用切片
  • 构建一个简单的Java框架来测量并发执行任务的时间
  • 深入浅出理解动态规划
  • The FastMCP Client
  • `tidyverse` 中涉及的函数及其用法
  • 【RAG Agent】Deep Searcher实现逻辑解析
  • 【JS逆向基础】数据库之redis
  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • 什么是 ELK/Grafana
  • 使用pytorch创建模型时,nn.BatchNorm1d(128)的作用是什么?
  • Muduo库中单例模式详解
  • Mysql(事务)
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • UE5多人MOBA+GAS 番外篇:移植Lyra的伤害特效(没用GameplayCue,因为我失败了┭┮﹏┭┮)
  • 音视频学习(四十一):H264帧内压缩技术
  • 【Vue进阶学习笔记】Vue 路由入门指南