news 2026/6/8 8:09:48

c++的继承和派生具体讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c++的继承和派生具体讲解

深入浅出 C++ 继承与派生:代码复用的核心利器
在 C++ 面向对象编程的三大特性中,继承无疑是实现代码复用的关键手段。而我们常说的“派生”,其实和“继承”是同一概念的两个表述——从已有类派生出新类,新类继承已有类的成员与特性。今天我们就来拆解继承与派生的底层逻辑,用简单代码带你吃透这个核心知识点。 一、继承与派生的基本概念 在 C++ 中,被继承的类称为基类(也叫父类),由基类派生出来的新类称为派生类(也叫子类)。 继承的核心价值在于代码复用:派生类无需重复编写基类已有的成员变量和成员函数,直接就能使用;同时还能根据需求扩展新的功能,实现类的层次化设计。 举个生活中的例子:“人”是一个基类,包含姓名、年龄等属性和吃饭、走路等行为;“学生”是派生类,继承了人的所有属性和行为,同时新增了学号、班级等属性,以及上课、考试等行为。 二、继承的语法与代码示例 C++ 中定义派生类的语法格式非常清晰: cpp

class 派生类名 : 继承方式 基类名 { // 派生类新增的成员}; 其中继承方式是关键,决定了基类成员在派生类中的访问权限,主要分为 public (公有继承)、 protected (保护继承)、 private (私有继承)三种。 我们以最常用的 public 继承为例,编写一个基础示例: cpp

#include #include using namespace std;// 基类:Personclass Person {public: string name; // 公有成员 int age; // 公有成员 // 基类成员函数 void showBasicInfo() { cout << “姓名:” << name << “,年龄:” << age << endl; }};// 派生类:Student,公有继承 Personclass Student : public Person {public: int studentID; // 派生类新增成员 // 派生类新增成员函数 void showStudentInfo() { // 直接使用基类的成员变量 name、age cout << “姓名:” << name << “,年龄:” << age << “,学号:” << studentID << endl; }};int main() { Student s; // 直接操作从基类继承的成员 s.name = “张三”; s.age = 19; // 操作派生类自己的成员 s.studentID = 2025001; // 调用基类的成员函数 s.showBasicInfo(); // 调用派生类的成员函数 s.showStudentInfo(); return 0;} 运行结果: plaintext

姓名:张三,年龄:19姓名:张三,年龄:19,学号:2025001 从代码中能清晰看到:派生类 Student 没有定义 name 、 age 和 showBasicInfo() ,但却能直接使用,这就是继承的直观体现;而 studentID 和 showStudentInfo() 则是派生类对基类功能的扩展。 三、三种继承方式的核心区别 继承方式直接影响基类成员在派生类中的访问权限,这是很多初学者容易混淆的点,我们用表格来总结核心区别(假设基类成员为 public ): 继承方式 基类 public 成员在派生类中 基类 protected 成员在派生类中 基类 private 成员在派生类中 public public protected 不可访问 protected protected protected 不可访问 private private private 不可访问 这里要注意一个关键细节:基类的私有成员,无论哪种继承方式,在派生类中都不可直接访问,如果需要访问,可通过基类的公有/保护成员函数间接实现。 我们再写一个保护继承的示例,对比差异: cpp

#include #include using namespace std;class Person {public: string name;protected: int age; // 保护成员private: string idCard; // 私有成员};// 保护继承class Teacher : protected Person {public: string subject; void showTeacherInfo() { name = “李老师”; // 基类public成员,现在是protected,派生类内可访问 age = 35; // 基类protected成员,派生类内可访问 // idCard = “123456”; // 错误!基类私有成员不可访问 cout << “姓名:” << name << “,年龄:” << age << “,科目:” << subject << endl; }};int main() { Teacher t; t.subject = “数学”; // t.name = “王老师”; // 错误!保护继承后,name变为protected,类外不可访问 t.showTeacherInfo(); return 0;} 四、继承与派生的常见应用场景 1. 实现代码复用:避免重复编写相同的成员变量和函数,减少冗余代码,提升开发效率。2. 构建类的层次结构:比如从 Animal 基类派生出 Dog 、 Cat 等派生类,体现“一般到特殊”的逻辑关系。3. 为多态打基础:继承是多态的前提,结合虚函数可以实现“一个接口,多种实现”的灵活设计。 五、初学者必看的注意事项 1. 继承不是越多越好,过度继承会导致类的耦合度升高,不利于代码维护,一般建议继承层次不超过三层。2. 派生类的构造函数会自动调用基类的默认构造函数,如果需要调用带参构造函数,需在初始化列表中显式指定。3. C++ 不支持多继承(一个派生类继承多个基类)的滥用,容易引发二义性问题,使用时需格外谨慎。 总结 继承与派生是 C++ 面向对象编程的核心,本质是通过复用基类代码,快速构建功能更丰富的派生类。掌握三种继承方式的区别,理解基类成员在派生类中的访问权限,就能灵活运用这一特性,写出更简洁、更具层次的代码。 希望这篇文章能帮你扫清继承与派生的学习障碍,快去动手写代码验证吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 2:31:25

Qwen3-VL-8B-Thinking:终极AI视觉推理全能王

导语&#xff1a;Qwen3-VL-8B-Thinking作为Qwen系列迄今为止最强大的视觉语言模型&#xff0c;凭借全面升级的文本理解、视觉感知与推理能力&#xff0c;正在重新定义多模态AI的应用边界。 【免费下载链接】Qwen3-VL-8B-Thinking 项目地址: https://ai.gitcode.com/hf_mirro…

作者头像 李华
网站建设 2026/5/16 8:42:55

网易云音乐NCM格式转换全攻略:解锁你的私人音乐库

网易云音乐NCM格式转换全攻略&#xff1a;解锁你的私人音乐库 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐的NCM加密格式而烦恼吗&#xff1f;每次想把下载的音乐分享到其他设备&#xff0c;却发现格式不兼容&am…

作者头像 李华
网站建设 2026/5/29 9:54:35

从零实现Elasticsearch全文搜索功能完整示例

手把手教你用 Elasticsearch 搭出一个能跑的全文搜索系统你有没有遇到过这种情况&#xff1a;用户在电商网站里搜“蓝牙耳机”&#xff0c;结果返回一堆不相关的商品&#xff0c;甚至连“有线耳机”都冒出来了&#xff1f;或者你在写博客系统时&#xff0c;想加个站内搜索功能&…

作者头像 李华
网站建设 2026/5/26 11:08:52

绝区零脚本重构艺术:打造智能游戏助手的创新指南

绝区零脚本重构艺术&#xff1a;打造智能游戏助手的创新指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 你是否厌倦了传…

作者头像 李华
网站建设 2026/5/29 21:28:38

OAuth2登录保护DDColor Web界面?多用户权限管理设想

OAuth2登录保护DDColor Web界面&#xff1f;多用户权限管理设想 在AI图像修复工具逐渐从个人项目走向团队协作甚至商业化部署的今天&#xff0c;一个曾经被忽视的问题正变得越来越紧迫&#xff1a;当你的DDColor服务暴露在公网&#xff0c;任何人都能上传老照片并调用GPU进行上…

作者头像 李华
网站建设 2026/5/27 13:40:18

KeymouseGo自动化实战:5步告别重复性鼠标键盘操作

KeymouseGo自动化实战&#xff1a;5步告别重复性鼠标键盘操作 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 还在为每天重…

作者头像 李华