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

【C++哲学】面向对象的三大特性之 继承

在 C++ 的面向对象编程(OOP)中,三大核心特性是:

封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism)

继承是其中非常重要的一部分,它可以让一个类复用另一个类的属性和行为,从而提高代码复用性和扩展性。


一、什么是继承(Inheritance)

继承指的是:
一个类(子类 / 派生类)可以继承另一个类(父类 / 基类)的成员变量和成员函数。

基本思想:

父类:通用属性 子类:扩展功能

例如:

动物 Animal | ├── 狗 Dog └── 猫 Cat

Dog 和 Cat 可以继承 Animal 的通用行为。


二、继承的基本语法

在 C++ 中继承的基本语法:

class子类名:继承方式 父类名{};

示例:

#include<iostream>usingnamespacestd;classAnimal{public:voideat(){cout<<"Animal eating"<<endl;}};classDog:publicAnimal{public:voidbark(){cout<<"Dog barking"<<endl;}};intmain(){Dog d;d.eat();d.bark();return0;}

输出:

Animal eating Dog barking

说明:

Dog继承了Animal的eat()函数

三、继承方式(重点)

在 C++ 中有三种继承方式

继承方式父类public父类protected父类private
public继承publicprotected不可访问
protected继承protectedprotected不可访问
private继承privateprivate不可访问

1 public继承(最常用)

特点:

父类public → 子类public 父类protected → 子类protected

示例:

classBase{public:inta;protected:intb;};classDerived:publicBase{};

访问情况:

Derived可以访问a和b 外部对象只能访问a

2 protected继承

规则:

父类public → 子类protected 父类protected → 子类protected

示例:

classDerived:protectedBase{};

特点:

外部对象无法访问Base成员

3 private继承

规则:

父类public → 子类private 父类protected → 子类private

示例:

classDerived:privateBase{};

特点:

父类成员对子类私有

四、继承中的构造函数

子类创建对象时,父类构造函数会先执行

示例:

#include<iostream>usingnamespacestd;classBase{public:Base(){cout<<"Base constructor"<<endl;}};classDerived:publicBase{public:Derived(){cout<<"Derived constructor"<<endl;}};intmain(){Derived d;}

输出:

Base constructor Derived constructor

顺序:

父类构造 → 子类构造

析构顺序:

子类析构 → 父类析构

五、继承中的成员同名问题

如果子类和父类有同名成员:

示例:

classBase{public:intnum=10;};classDerived:publicBase{public:intnum=20;};

访问:

Derived d;cout<<d.num<<endl;cout<<d.Base::num<<endl;

输出:

20 10

说明:

子类成员会隐藏父类成员

六、多继承

C++ 支持一个类继承多个父类。

示例:

classA{public:voidfuncA(){cout<<"A"<<endl;}};classB{public:voidfuncB(){cout<<"B"<<endl;}};classC:publicA,publicB{};

使用:

C c;c.funcA();c.funcB();

七、菱形继承(经典问题)

结构:

A / \ B C \ / D

问题:

D会继承A两次

解决方案:

使用虚继承(virtual inheritance)

示例:

classA{public:intnum;};classB:virtualpublicA{};classC:virtualpublicA{};classD:publicB,publicC{};

这样:

D只保留一份A

八、继承的优点

继承的核心优势:

1️⃣代码复用

避免重复代码。

2️⃣层次结构清晰

动物 → 哺乳动物 → 狗

3️⃣方便扩展

新增子类即可。


九、继承的缺点

继承也存在一些问题:

1️⃣耦合度高

子类依赖父类。

2️⃣层级过深难维护

A → B → C → D → E

3️⃣多继承复杂

可能产生菱形问题。


十、继承 vs 组合

软件设计中常有一句经典原则:

优先使用组合,而不是继承

继承:

is-a

例如:

Dog is a Animal

组合:

has-a

例如:

Car has a Engine

总结

C++继承核心知识:

继承三要点 ├── 继承语法 ├── 三种继承方式 └── 构造与析构顺序

重要概念:

public继承(最常用) 多继承 菱形继承 虚继承

一句话理解:

继承就是在已有类基础上扩展新功能,实现代码复用。


如果你愿意,我可以再给你整理一份C++面向对象核心知识(封装 + 继承 + 多态 + 虚函数)一张图彻底讲清楚,很多 C++ 面试都会考。

http://www.jsqmd.com/news/485812/

相关文章:

  • 连锁零售企业商旅平台排名Top 6与选型全指南:从痛点拆解到实践落地 - 资讯焦点
  • 以SOC为均衡条件的电容分层均衡系统,每组4节电池,先组内再组间均衡,支持充放电设置及上下限调节
  • 计算机毕业设计springboot高校宿舍报修管理系统 基于Spring Boot框架的高校公寓设施运维管理平台 智慧校园学生寝室维修服务系统的设计与实现
  • 三家值得一式的携程任我行礼品卡回收平台 - 淘淘收小程序
  • 哈尔滨欧米奇西点烘焙学校,绥化地区推荐选择吗 - 工业品网
  • 计算机毕业设计springboot高校宿舍管理系统 基于SpringBoot的高校学生公寓智慧管理平台设计与实现 SpringBoot框架下校园住宿服务综合管理系统开发
  • C++ 二叉树、堆与搜索二叉树机制-个人复习记录
  • 分析长春可代加工的PE排水管厂家,选购时注意这些要点 - mypinpai
  • 2026销售管理系统全链路对比:6类CRM产品核心能力拆解
  • 车辆稳定性相平面MATLAB程序绘制探索
  • 斯坦福 CS336 从零构建大模型 (2025 春) - 第十三讲:数据(Data 1)
  • 知识付费平台推荐指南:2026年五大主流平台实测对比 - 资讯焦点
  • 计算机毕业设计springboot基于JAVA个人博客网站系统 基于Spring Boot的个人博客平台设计与实现 基于Java Web的独立博客系统开发与实现
  • 合规深耕抗衰科研赛道 斐萃科学抗衰研究院成立 - 速递信息
  • 2026权威评测:毕业论文AIGC痕迹怎么破?盘点降重神器!
  • 刷屏全网的开工手势舞,藏着58同城的行业级营销破局思路 - 速递信息
  • 视频会议EasyDSS语音转写STT/AI会议摘要/AI大模型智能技术重构会议全流程
  • 新人必读:瑞祥卡回收渠道选择与流程全攻略5大注意事项 - 团团收购物卡回收
  • 当光伏遇上粒子群:配电网优化配置实战
  • 系统集成项目管理工程师章节占分比(2023~2025年)
  • DL00359:‘深度学习CNN水稻病虫害自动识别系统‘——助力种植用户快速识别虫害
  • Cosmos-Reason1-7B效果展示:从原始视频到物理因果链推理的完整可视化
  • Agent 记忆系统架构设计:从双层存储到智能整合的工程实践
  • Matlab Simulink下的LLC并网与离网逆变器功能介绍:电流闭环控制并网,电压电流双...
  • 2026深度剖析迈从怎么样:多重核心优势加持,彰显强劲市场竞争力 - 速递信息
  • stack的实现,queue的实现,deque的介绍和priority_queue的实现以及仿函数的介绍与运用
  • 从 “Top-K 问题” 入门二叉堆:C 语言从零实现与经典应用
  • SiameseUIE在政务文本分析中的应用:政策文件关键要素抽取实战
  • Proteus仿真下基于多种单片机的波形发生器程序设计:LCD显示、DAC输出与按键调节功能
  • 基于MATLAB的期货预测模型:PSO优化SVM与未优化的SVM对比分析报告