多态

概念

父类的引用或指针指向子对象

分类

●静态多态:函数重载
静态联编:地址早绑定,编译阶段绑定好地址,不能根据对象决定调用的函数

●动态多态:虚函数(父类使用虚函数,发生了多态,子类必须重写虚函数)
动态联编:地址晚绑定,运行时候绑定好地址

原理

 父类中有虚函数后,内部结构就发生了改变,多了一个vfptr(虚函数指针)指向vftable(虚函数表)

 子类会继承父类的vfptr和vftable(不是同一个,构造函数中会将虚函数表指针指向自己的虚函数表)

 子类重写(不是重载,重写所有东西都一样)会替换掉虚函数表原有的父类函数,改为子类的函数
c++基础视频笔记 7 多态

深入剖析

内部调用:
c++基础视频笔记 7 多态

作用——计算器案例

开发原则:开闭原则,对扩展开放,对修改关闭

早期方法:计算器类成员函数有加减,后期加乘除功能需要修改代码,不方便

多态实现:抽象计算器类,用加计算器类和减计算器类继承它,扩展的话新建乘类就很方便

抽象类和纯虚函数

●纯虚函数:virtual void func() = 0;

●抽象类:类中有纯虚函数,不可以实例化对象。如果类继承了抽象类,必须重写抽象类中的纯虚函数

虚析构和纯虚析构

●虚析构:virtual ~类名() {}

解决问题:父类指针指向子类对象时候可以调用子类析构函数

●纯虚析构:virtual ~类名() = 0

用法:类内声明,类外实现

注意:出现了纯虚析构函数,类算抽象类,不能实例化对象

向上类型转换和向下类型转换

注意:派生类中有基类中不具备的特性

●基类转派生类:向下,不安全

●派生类转基类:向上,安全

●多态:父类的引用或指针指向子类对象,因为new的是派生类,所以安全

相关文章:

  • 2022-12-23
  • 2021-06-12
  • 2021-04-26
  • 2021-08-24
  • 2021-11-11
  • 2022-12-23
  • 2021-06-03
  • 2021-06-08
猜你喜欢
  • 2021-06-01
  • 2021-12-22
  • 2021-12-17
  • 2021-09-22
  • 2021-12-25
  • 2021-04-29
  • 2021-10-14
相关资源
相似解决方案