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

【C++复习】第三弹之继承和多态

前言

继承和多态是C++语法设计的精髓,也是我们对代码进行优化,重构的好方法。继承主要是类层次的复用,多态就是不同对象的不同执行方法,在继承的前提下,对关系类的方法进行重写。

1.继承的问题?如何解决?

继承,在C++中,分为单继承和多继承,单进程很好理解,就是一个子类他只有一个父类。多继承就会产生一个大的问题就是菱形继承,引发的问题就是数据冗余和二义性。

 回答:主要问题是菱形继承的问题,一个派生有两个或多个基类,而这些基类有一个共同的基类,继承关系就是一个菱形。

二义性:子类有多个基类的同名成员变量,就会导致访问对象不清楚,需要显示去指定。

数据冗余:子类对象里面会有多分基类对象的数据。使用虚继承就可以继承一份计类的成员变量。

解决方法:,对象存放虚基表指针。引入虚基表,虚基表里面存放偏移量,通过+偏移量去找到基类变量的地址。

2.多态的原理?虚表?

前面的继承关系让我知道了,子类对象如何存储父类对象的。接下来的动态多态就是建立在这个基础上,对函数方法的复用。
在以后遇到的多态问题我们要记住构成多态的两个条件:

①必须通过基类的指针或者引用去调用虚函数。

②虚函数必须重写。

回答:多态分为静态的多态和动态的多态,静态的多态主要是通过函数名的修饰规则,去区分不同的函数,动态的多态就是在在继承关系下调用对象的操作方法,前提要求是在引入virtual的函数中,也就是重写了父类的虚函数。就会去调用指针或者引用的指向对象。如果不构成多态就会去调用指针 或者引用的类型,也就是其本身的对象类型和调用对象无关

这会儿还需要唠叨一句,所谓的动态,就是指我并不知道我的身份,我通过基类,也就是统一的底层方法去认证,找到我的虚函数地址,这个才是动态绑定也就是运行时多态的理解。思想也是类似于静态,我通过形参去调用一个函数名统一的方法类,基类的时候,我会去通过已经生成好了的函数名取调函数,而虚函数是通过基类的指针和引用去绑定类。然后调用虚表。多继承下会调用第一个找到的函数,也会有二义性问题,可以显示去调用或者虚继承解决。
 


http://www.kler.cn/news/368622.html

相关文章:

  • K8s安装手册
  • 2024年信息化管理与计算技术研讨会 (ICIMCT 2024)--分会场
  • Python画笔案例-094 绘制 神奇彩条动画
  • 以 6502 为例讲讲怎么阅读 CPU 电路图
  • Kaggle 数据集dogs-vs-cats的错误
  • C++游戏开发
  • 面向接口的方式进行CRUD
  • 排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!
  • C++:多态(用法篇)
  • webpack解决使用window.open方法打开history路由页面提示404的问题
  • linux softirq tasklet 软中断实现
  • AGI大模型面经汇总,太全了!收藏一下吧很难找全的!
  • 2-135 基于matlab的有限差分法计算电位分布
  • Linux系统设置开机自启动.py脚本(树莓派Ubuntu)
  • 使用虚拟机搭建环境:CentOS7 Docker、MySQL、Redis 安装与配置
  • 微信小程序美团点餐
  • 【软件工程】软件项目管理/工程项目管理复习资料
  • Rust: [u8] 与 String 相互转换
  • JavaScript(操作元素属性:样式style,className,classList,表单元素,自定义属性,间歇函数)注册用户协议同意倒计时
  • 【论文笔记】MLSLT: Towards Multilingual Sign Language Translation
  • 数据结构之 二叉树详解一 介绍篇
  • 如何提高游戏的游戏性
  • 电动汽车与软件定义汽车(SDV)时代的汽车行业变革
  • 【机器学习-无监督学习】自编码器
  • First - Word Fall - Through ( FWFT ) Read Operation
  • 【制造业&PPE】施工安全防护装备检测系统源码&数据集全套:改进yolo11-RVB-EMA