C++多态

一.多态基本概念

多态多态可以分两类

  • 静态多态:函数重载和运算符重载属于静态多态,复用函数名
  • 动态多态:派生类和虚函数实现运行时多态

静态多态和动态多态区别

  • 静态多态的函数地址早绑定-编译阶段确定函数地址
  • 动态多态的函数地址晚绑定-运行阶段确定函数地址

动态多态的满足的条件

  1. 有继承关系
  2. 子类重写(函数返回值类型,函数名,参数列表完全相同)父类的虚函数(函数名前加virtual
    image

image

动态多态使用
父亲的指针或者引用 指向子类对象

二.纯虚函数和抽象类

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容

因此可以将虚函数改为纯虚函数

语法:virtual 返回值类型 函数名 (参数列表)=0;

当类中有了纯虚函数,这个类也称为抽象类

抽象类

  • 无法实例化对象
  • 子类必须重写抽象中的纯虚函数,否则也属于抽象类
    image

三.虚析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

解决方式:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性
可以解决父类指针释放子类对象
都需要有具备的函数实现

虚函数和纯虚析构的区别
如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法
virtual ~类名(){}
纯虚析构语法
virtual ~类名()=0;
类名::~类名(){}
image

posted @   Eric`  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示