C++ 继承与多态完全详解
面向对象三大特性封装、继承、多态。如果说封装让代码更安全那么继承让代码复用多态让代码可扩展。继承和多态是 C 面向对象的重中之重、面试必考、工程必用。很多同学学完只会背概念分不清重写、重载、隐藏不懂虚函数原理不知道动态绑定到底是什么。本文带你从零吃透继承体系 访问权限 构造析构规则 多态原理 虚函数 纯虚函数 抽象类全程配图、流程图、可运行代码一次性搞定所有难点。一、什么是继承核心概念1.1 生活理解继承子类拥有父类的所有属性和行为并且可以扩展自己的新功能。父类基类通用、抽象、公共代码子类派生类特有、扩展、个性化代码1.2 继承的作用代码复用公共代码只写一次所有子类直接复用代码分层结构清晰层级明确为多态做铺垫没有继承就没有多态1.3 继承语法class 子类名 : 继承方式 父类名 { // 子类新成员 };1.4 三种继承方式面试重点C 支持三种继承public / protected / private继承方式父类 public父类 protected父类 private使用场景public 公有继承publicprotected不可见日常开发 99% 使用protected 保护继承protectedprotected不可见极少用private 私有继承privateprivate不可见几乎不用核心结论private 成员永远无法被子类继承访问想让父类成员子类能用、外部不能用→ 用protected工程开发只记一律使用 public 继承二、继承中的构造与析构顺序2.1 核心规则构造函数先父后子析构函数先子后父2.2 执行流程可视化2.3 验证代码#include iostream using namespace std; class Parent { public: Parent() { cout 父类构造 endl; } ~Parent() { cout 父类析构 endl; } }; class Child : public Parent { public: Child() { cout 子类构造 endl; } ~Child() { cout 子类析构 endl; } }; int main() { Child c; return 0; }输出顺序父类构造 → 子类构造 → 子类析构 → 父类析构三、继承中的同名隐藏踩坑重点3.1 什么是隐藏当子类和父类有同名成员函数/变量子类函数会隐藏父类同名函数父类函数在子类中不可见。3.2 隐藏 vs 重写提前区分隐藏普通函数父子同名不构成多态重写覆盖虚函数父子同名同参构成多态四、多态详解OOP 灵魂4.1 什么是多态多态同一行为不同表现。通俗理解父类指针指向子类对象调用函数时执行子类的方法。4.2 多态的成立条件面试必考四条必须同时满足存在继承关系父类有virtual 虚函数子类重写override虚函数父类指针/引用 指向子类对象4.3 多态执行原理流程图4.4 多态完整实战代码#include iostream using namespace std; // 父类 class Animal { public: // 虚函数支持多态 virtual void speak() { cout 动物在叫 endl; } }; // 子类1 class Dog : public Animal { public: // 重写虚函数 void speak() override { cout 汪汪汪 endl; } }; // 子类2 class Cat : public Animal { public: void speak() override { cout 喵喵喵 endl; } }; // 统一接口实现多态 void doSpeak(Animal a) { a.speak(); } int main() { Dog d; Cat c; doSpeak(d); doSpeak(c); return 0; }输出结果汪汪汪 、 喵喵喵关键点同样的speak()接口不同对象不同行为这就是多态。五、重载、重写、隐藏 终极区别面试高频类型作用域函数签名virtual是否多态重载 Overload同类函数名同参数不同不需要否隐藏 Hide父子类同名即可非虚函数否重写 Override父子类完全一致名/参/返回必须 virtual是六、虚函数、纯虚函数、抽象类6.1 普通虚函数有默认实现子类可重写也可不重写。virtual void func() {}6.2 纯虚函数重点没有实现强制子类必须重写。virtual void func() 0;6.3 抽象类包含纯虚函数的类就是抽象类。特性无法实例化对象只能被继承子类必须实现所有纯虚函数否则子类也是抽象类6.4 抽象类实战接口思想#include iostream using namespace std; // 抽象父类 class Shape { public: // 纯虚函数 virtual void getArea() 0; }; class Circle : public Shape { public: void getArea() override { cout 圆形面积 endl; } }; class Rect : public Shape { public: void getArea() override { cout 矩形面积 endl; } }; int main() { Shape *s1 new Circle(); Shape *s2 new Rect(); s1-getArea(); s2-getArea(); delete s1; delete s2; return 0; }七、多态底层原理虚函数表 vtable7.1 什么是虚表一旦类中出现virtual函数编译器会自动生成一张虚函数表。每个对象内存中会多出一个虚表指针 vptr指向本类的虚表。7.2 多态调用原理父类指针指向子类对象通过对象的 vptr 找到虚表调用虚表中子类重写后的函数地址这就是动态绑定运行时确定调用哪个函数7.3 静态绑定 vs 动态绑定普通函数静态绑定编译阶段确定调用地址虚函数动态绑定运行时根据对象真实类型确定八、继承多态经典坑点虚析构函数8.1 问题场景父类指针 delete 子类对象时如果析构非虚只会调用父类析构子类内存泄漏8.2 正确写法class Parent { public: virtual ~Parent() {} // 虚析构 };工程规范只要类可能被继承析构函数一律写 virtual九、全文总结1. 继承核心目的代码复用、层级抽象构造先父后子析构先子后父开发只用public 继承2. 多态核心条件继承 虚函数 重写 父指子对象本质动态绑定、虚函数表价值接口统一、扩展性极强开闭原则3. 三大函数区别重载同域、参数不同隐藏父子同名、非虚函数重写父子虚函数、完全覆盖 ——唯一多态4. 工程准则需要复用 → 继承需要统一接口、多场景扩展 → 多态 虚函数基类析构必写 virtual统一规范用 override 显式重写

相关新闻

ARM Cortex-M4系统控制寄存器深度解析与RTOS实战应用

ARM Cortex-M4系统控制寄存器深度解析与RTOS实战应用

1. 项目概述与核心价值在嵌入式开发,尤其是基于ARM Cortex-M系列MCU的项目里,系统控制和中断管理是决定整个系统实时性、稳定性和可靠性的基石。很多开发者,特别是刚接触RTOS或复杂中断嵌套的朋友,往往对芯片手册里那一大堆系统控…

2026/10/15 18:30:57 阅读更多 →
Qwen3.8-max-Preview代码生成能力实测:AI编程助手的技术突破

Qwen3.8-max-Preview代码生成能力实测:AI编程助手的技术突破

最近在AI编程助手领域,一个值得关注的变化正在发生:阿里云推出的Qwen3.8-max-Preview版本在代码生成能力上展现出了明显优势,特别是在与市场上其他主流工具(如K3)的对比中表现突出。对于日常需要编写、调试、优化代码的…

2026/10/15 18:31:07 阅读更多 →
ARM Cortex-M系统控制模块:时钟、功耗与外设管理实战指南

ARM Cortex-M系统控制模块:时钟、功耗与外设管理实战指南

1. 系统控制模块:嵌入式开发的“中枢神经”在嵌入式开发领域,尤其是基于ARM Cortex-M内核的微控制器项目里,系统控制模块(System Control)扮演的角色,远不止是手册里描述的“控制设备整体运行”那么简单。你…

2026/10/1 10:16:01 阅读更多 →

最新新闻

NLog 项目贡献指南:从 Issue 报告、多目标编译到 CI 构建的完整实战手册

NLog 项目贡献指南:从 Issue 报告、多目标编译到 CI 构建的完整实战手册

后端运维观测 【免费下载链接】NLog NLog - Flexible and Structured Logging for various .NET Platforms 项目地址: https://gitcode.com/gh_mirrors/nl/NLog 点击查看 免费下载 本文档是 NLog 开源仓库(.NET 平台灵活的结构化日志框架)中…

2026/10/15 18:31:45 阅读更多 →
2026 必应(Bing)关键词 SEO 优化排名全攻略:算法逻辑 + 落地实操 + 效果监测

2026 必应(Bing)关键词 SEO 优化排名全攻略:算法逻辑 + 落地实操 + 效果监测

国内搜索引擎市场,百度始终占据主流地位,多数企业的 SEO 布局也围绕百度展开,但往往忽略了第二大桌面搜索引擎必应(Bing)的流量价值。随着 2025 年必应搜索算法持续迭代,AI 语义识别能力大幅提升&#xff0…

2026/10/15 18:31:45 阅读更多 →
5分钟搞懂 octo-server 交互式卡片协议:一份 JSON 如何搞定消息渲染与交互

5分钟搞懂 octo-server 交互式卡片协议:一份 JSON 如何搞定消息渲染与交互

【免费下载链接】octo-server 🐙 The Go backend powering OCTO — an open workplace built for humans AI agents. REST & WebSocket APIs, Lobster (AI agent) orchestration, and WuKongIM real-time messaging control plane. 项目地址: https…

2026/10/15 18:31:45 阅读更多 →
Trae中设置 Skill

Trae中设置 Skill

前提:登录Trae什么是 Skill?定义一个 Skill 是一份清晰、严谨、可执行的指令文档,用于明确告诉模型——在什么条件下(When),按照哪些步骤(How),产出什么结果(…

2026/10/15 18:31:45 阅读更多 →
Camping World EDI 项目注意事项:订单变更、ASN、库存同步与供应商合规细节

Camping World EDI 项目注意事项:订单变更、ASN、库存同步与供应商合规细节

对接 Camping World EDI,需要把采购订单、订单变更、商品编码、仓库装箱、发货通知和发票处理连接起来。单据发送成功之后,数据是否符合订单要求、ASN 是否与实物一致、标签是否能够匹配收货流程,都会影响订单履约和回款。 此前发布的文章 …

2026/10/15 18:31:45 阅读更多 →
LED点阵显示任意汉字:从字模生成到串口协议全链路实现

LED点阵显示任意汉字:从字模生成到串口协议全链路实现

简介:本资源是一套完整的LED点阵汉字显示系统开发包,面向嵌入式初学者、单片机课程设计者及AVR实践爱好者,解决“如何让88或1616点阵动态显示任意GB2312汉字”这一典型硬件交互问题。压缩包共18个文件,含AVR下位机核心代码&#x…

2026/10/15 18:30:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →