news 2026/4/28 17:24:40

深入理解C++继承机制:从原理到实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解C++继承机制:从原理到实践

一、继承核心概念

1. 为什么需要继承?

重复代码过多、类与类之间功能高度相似,重复编写冗余。继承作用:

  1. 代码复用:子类直接拥有父类所有成员
  2. 层级设计:抽象公共父类,扩展独有子类
  3. 多态基础:为后续多态、项目架构铺路

2. 父子类关系

  • 父类(基类):抽取公共属性与行为
  • 子类(派生类):继承父类,扩展自有功能

通俗举例:动物(父类)→ 狗、猫、鸟(子类)学生(父类)→ 小学生、大学生(子类)


二、继承基础语法

cpp

运行

class 子类名 : 继承方式 父类名 { // 子类独有成员 };

三种继承方式:

  • public公有继承(开发最常用
  • protected保护继承
  • private私有继承

三、公有继承 public(重点掌握)

规则

  1. 父类public→ 子类public
  2. 父类protected→ 子类protected
  3. 父类private→ 子类不可见、无法访问

基础示例

#include <iostream> #include <string> using namespace std; // 父类 class Person { public: string name; protected: int age; private: int id; public: void showBase() { cout << "姓名:" << name << endl; } }; // 公有继承 class Student : public Person { public: double score; // 子类独有方法 void study() { cout << "学生正在学习" << endl; // age 受保护,子类可访问 cout << "年龄:" << age << endl; // id 私有,子类无法访问 // cout << id; // 报错 } };

使用

int main() { Student s; // 继承父类公有成员 s.name = "小明"; s.showBase(); // 子类自有成员 s.score = 95; s.study(); return 0; }

四、三种继承方式权限总表(必背)

表格

父类成员public 继承protected 继承private 继承
publicpublicprotectedprivate
protectedprotectedprotectedprivate
private不可访问不可访问不可访问

工程开发只使用 public 继承,另外两种极少用。


五、父子类 构造与析构顺序

核心规则

  1. 构造顺序:先父类构造 → 后子类构造
  2. 析构顺序:先子类析构 → 后父类析构

原理:子类依赖父类资源,必须先搭建父类基础,再扩展子类;销毁反向执行。

代码演示

class Person { public: Person(){ cout << "父类构造" << endl; } ~Person(){ cout << "父类析构" << endl; } }; class Student : public Person { public: Student(){ cout << "子类构造" << endl; } ~Student(){ cout << "子类析构" << endl; } }; int main() { Student s; return 0; }

输出:

父类构造 子类构造 子类析构 父类析构

六、子类调用父类有参构造

子类无法继承构造函数,必须手动指定调用父类构造语法:

子类构造(参数) : 父类构造(实参) { }

示例:

Person(string n) { name = n; } Student(string n, double s) : Person(n) { score = s; }

七、同名成员隐藏(继承坑点)

子类与父类出现同名成员变量 / 函数

  • 子类成员隐藏父类成员
  • 默认优先访问子类自身
  • 强制访问父类:父类名::成员
// 访问父类同名函数 s.Person::showBase();

八、继承分类(了解)

  1. 单继承:一个子类只继承一个父类(常用)
  2. 多继承:一个子类继承多个父类(复杂项目偶尔用)
  3. 多层继承:A→B→C 链式继承

九、高频易错点

  1. 误以为 private 成员子类可以继承访问
  2. 忽略构造析构顺序,导致资源错乱
  3. 子类有参构造不主动调用父类有参构造
  4. 滥用私有 / 保护继承,破坏代码可读性
  5. 同名成员不区分作用域,引发逻辑覆盖

十、今日核心总结

  1. 继承目的:代码复用、层级抽象
  2. 日常开发统一使用public 公有继承
  3. 父类私有成员永远无法被子类访问
  4. 构造:先父后子;析构:先子后父
  5. 同名成员会隐藏,可通过类名::强制访问父类
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 17:23:25

从华为/中软国际考题看企业网安合规:一线工程师必须避开的10个实操雷区

企业网络安全合规实战指南&#xff1a;工程师必须警惕的10大高危操作场景 在数字化转型浪潮中&#xff0c;企业网络安全已从单纯的技术问题升级为关乎商业信誉和法律风险的核心议题。尤其对于服务企业客户的乙方工程师而言&#xff0c;每一次现场服务、每一行代码提交、每一份数…

作者头像 李华
网站建设 2026/4/28 17:22:19

synchronized 与 JUC 锁对比

一、先说结论 面试时被问到这个问题&#xff0c;直接先甩结论&#xff1a; 特性synchronizedJUC Lock&#xff08;ReentrantLock&#xff09;实现层级JVM 内置&#xff08;C&#xff09;Java AQS 框架锁释放自动释放手动释放&#xff08;必须 finally&#xff09;公平锁❌ 不…

作者头像 李华
网站建设 2026/4/28 17:20:56

2026届必备的降AI率网站实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下人工智能内容生成技术处于广泛普及的状况下&#xff0c;各种各样的AI检测系统随之渐渐…

作者头像 李华
网站建设 2026/4/28 17:19:50

终极解决方案:Mac用户如何实现微信聊天记录无损备份与可视化查看

终极解决方案&#xff1a;Mac用户如何实现微信聊天记录无损备份与可视化查看 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter WeChatExporter为Mac用户提供了一套完整的微…

作者头像 李华
网站建设 2026/4/28 17:19:33

3分钟快速上手:OBS RTSP服务器插件完整使用指南

3分钟快速上手&#xff1a;OBS RTSP服务器插件完整使用指南 【免费下载链接】obs-rtspserver RTSP server plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-rtspserver 想要将OBS Studio的专业直播内容无缝推送到监控系统、智能电视或局域网内的…

作者头像 李华