c++基础视频笔记 7 多态

多态

概念

父类的引用或指针指向子对象(动态多态要使用虚函数)

分类

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

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

原理

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

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

 子类重写(不是重载,重写所有东西都一样)会替换掉虚函数表原有的父类函数,改为子类的函数
在这里插入图片描述

深入剖析

内部调用:
在这里插入图片描述

作用——计算器案例

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

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

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

抽象类和纯虚函数

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

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

虚析构和纯虚析构

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值