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

多态

多态

今天我们来学一下多态这个概念

为什么需要多态?

假如我们想要定义一个动物叫的函数,如果没有使用多态,那么将会是这样的

#include <iostream>
using namespace std;// 定义狗类
class Dog {
public:// 狗的叫void bark() {cout << "小狗:汪汪汪~" << endl;}
};// 定义猫类
class Cat {
public:// 猫的叫void meow() {cout << "小猫:喵喵喵~" << endl;}
};// 定义鸡类
class Chicken {
public:// 鸡的叫void cluck() {cout << "小鸡:咯咯咯~" << endl;}
};// 主函数:让不同动物叫
int main() {Dog dog;Cat cat;Chicken chicken;// 调用不同的函数,才能让不同动物叫dog.bark();cat.meow();chicken.cluck();return 0;
}

可以看到,代码是及其繁琐且复杂的,而且可读性也不强,所以我们引入了多态这一概念

实现多态的三个前提条件

  1. 必须存在继承关系(比如要写猫叫与狗叫的逻辑前提为猫和狗的父类为动物类)
  2. 必须有由父类指向的指针
  3. 子类必须重写父类的虚函数(virtual)

如果有不懂的词,不用着急,接下来会继续演示深入

虚函数

下面来介绍一下虚函数这一个概念
虚函数相当于是子类允许重写函数的开关,如果没有声明为虚函数,那么即使重写了,也无法触发多态
下面是使用虚函数实现多态的一个示例

class Animal { // 父类
public:virtual void cry() { // 虚函数cout << "动物的叫声" << endl;}
};class Dog : public Animal { // 子类继承父类
public:// 正确重写:函数名、返回值、参数列表完全和父类一致void cry() {cout << "小狗:汪汪汪~" << endl;}
};

重写

子类定义一个和父类虚函数完全一致的函数,替换父类的默认实现,实现子类专属逻辑 —— 这是多态的核心行为
子类重写的函数,必须和父类虚函数满足 函数名相同、返回值相同、参数列表完全相同(个数、类型、顺序都一致),否则编译器会认为是子类新增函数,而非重写,无法触发多态。

重写检测

子类重写的可选写法:override 关键字(可加可不加)
C++11 新增 override 关键字,写在子类重写函数的末尾,强制编译器检查是否满足重写规则—— 如果不满足(比如函数名写错、参数不一致),编译器会直接报错,避免新手因笔误导致多态失效。

指针与引用

使用指针实现多态

anm* p1 = &a;
p1->cry();

输出

喵喵喵~

使用引用实现多态

void letAnimalCry(Animal& animal) {animal.cry();
}

输出

喵喵喵~

如果既不使用指针,也不使用引用,那么多态将会失效

动物叫   //(未触发多态)
http://www.jsqmd.com/news/342741/

相关文章:

  • 2026年评价高的输送机设备公司推荐:工业输送带/橡胶输送带/煤矿皮带输送机/皮带机输送机/皮带输送机设备/矿山输送机/选择指南 - 优质品牌商家
  • IT英语
  • Qt —— 实时接收解析XPlane12网络输出飞行数据(附:详细解析说明、源码、XPlane12软件包)
  • [大模型实战 03预备] 云端炼丹房 2:Kaggle 上手指南
  • 2025年DT SCI1区TOP,无人机编队鲁棒多目标任务规划: 融合任务预分配与重分配框架,深度解析+性能实测
  • 2026年耐磨输送带厂家最新推荐:输送带托辊/输送带生产厂家/食品输送带/上料输送机/传送带输送机/小型输送机/选择指南 - 优质品牌商家
  • Rust简要汇总(持续更新)
  • 2026年评价高的输送机厂家公司推荐:网带输送机/耐磨输送带/耐高温输送带/辊道输送机/输送带托辊/输送带生产厂家/选择指南 - 优质品牌商家
  • 学习进度 19
  • 【回眸】设置OKTA Email证书过期问题改进
  • 老年人能力评估系统开发Day11
  • 【回眸】Polyspace教程(一) 小白使用篇
  • Kmesh-daemon 深度解析:服务网格数据面的核心引擎
  • 机器学习 - 轮次(Epoch)
  • C#动态代码最近实践
  • Boss项目:部门新增+部门编辑+部门删除+登录拦截(鉴权)
  • 2026 主流 AI 论文生成工具排行榜(按综合推荐指数)
  • 2026年纯碱厂家最新推荐:阻垢剂纯碱厂家/食品级厂家/60-160目工业级纯碱/印染助剂纯碱厂家/工业级氨水厂家/选择指南 - 优质品牌商家
  • 物种分布曲线的五个矩
  • datagrip升级后破解密码--以后也用不到
  • 数据立方体在智慧城市建设中的关键作用
  • 【RAG技术】- RAG系统调优手段之知识库处理(纯干货,建议收藏!!!)
  • 【PMP】风险管理
  • 【PMP】项目生命周期与组织变革
  • PostgreSQL 16 容器主从流复制
  • 前缀和算法:从一道 LeetCode 题看区间求和优化思想
  • Elasticsearch:使用 Elastic Workflows 构建自动化
  • PPP与PPPoE协议介绍
  • Jina Rerankers 为 Elastic 推理服务(EIS)带来了快速、多语言的重排序能力
  • 低功耗蓝牙怎样音频协商音频能力?PACS(Published Audio Capabilities Service)来助力!!