【C++】多态-最全解析(多态是什么?如何使用多态?多态的底层原理是什么?)
目录
一、前言
二、多态是什么?
三、多态的定义及实现
🔥 多态的构成条件🔥
🔥 虚函数的重写🔥
🔥虚函数重写的两个例外 🔥
🍍 协变返回类型
🥝 析构函数的重写
🔥C++11 的 override 和 final 🔥
🍑override
🍉final
🔥重载、覆盖(重写)、隐藏(重定义)的对比 🔥
💢重载(Overloading)
💢覆盖(重写)(Overriding)
💢重定义(隐藏)(Hiding)
四、抽象类
五、多态的原理
💢多态性的基本原理
💧虚函数表指针💧
💧虚函数表💧
💧虚函数表和虚指针相互关联构成 --- 多态💧
💢 动态绑定和静态绑定
六、多态的常考面试题
七、共勉
一、前言
多态 ---- 是 面向对象 三大基本特征中的最后一个,多态 可以实现 “一个接口,多种方法”,比如 父类 和 子类 中的同名方法,在增加了多态后,调用同名函数时,可以根据不同的对象(父类对象或子类对象)调用属于自己的函数,实现不同的方法,因此 多态 的实现依赖于 继承
如果大家还不太了解 继承 可以先看看这篇文章:C++继承详解
二、多态是什么?
多态(Polymorphism)这个词来源于 希腊语,意思是“多种形态”。在编程中,多态允许你 使用相同的接口(方法或函数)来 处理不同的 数据类型 或 对象。这使得代码更加灵活和可扩展。
通俗一点:不同对象 ----- 完成同一件事情 ----- 产生不同的结果
举例1:
比如 春节回家买票 (看作一件事情),当普通人买票时,是全价买票 ;学生买票时,半价买票;军人买票时是优先买票。(不同的对象,产生了不同的结果)
举例2:
为了争夺在线支付市场,支付宝年底经常会做诱人的 扫红包-支付-给奖励金 的活动。
那么大家想想为什么有人扫的红包又大又新鲜 8块、10 块...而有人扫的红包都是1毛,5...。其实这背后也是一个多态行为。
总结一下:同样是扫码动作(看作一件事情),不同的用户扫得到的不-样的红包(不同的对象,产生了不同的结果),这也是一种多态行为。
代码举例:引出 本篇文章所要学习的 关于多态的 十万个 为什么?
假设你在家里有一只宠物。宠物可以是 猫、狗 或 鸟。每种宠物都会发出叫声,但每种宠物的叫声不同。我们可以定义一个基类 Pet,然后让 Cat、Dog 和 Bird 继承自这个基类。
class Pet { public: virtual void makeSound() { cout