【C++】一文带你初识C++继承

食用指南:本文在有C基础的情况下食用更佳
🍀本文前置知识: C++类
♈️今日夜电波:napori—Vaundy
1:21 ━━━━━━️💟──────── 3:23
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
🍑一、继承和派生的概述
🍒 二、继承的语法
派生类定义格式:
继承方式分类:
基类个数分类:
派生类继承基类的规则 :
🍈三、继承中的构造函数和析构函数
构造和析构的顺序
🍉子类中的构造(重要)
知识点1:
知识点2:
🥝四、父类和子类的同名处理
成员变量的处理
成员函数的处理
🍑一、继承和派生的概述
在C++中,继承是一种对象-oriented编程(面向对象编程)的概念,它允许创建一个新的类(称为派生类)从一个现有的类(称为基类)继承属性和行为。通过继承,派生类可以获得基类的成员变量、成员函数和其他特性。
继承有几种类型:公有继承、私有继承和受保护的继承。在公有继承中,基类的公有成员在派生类中仍然是公有的;在私有继承中,基类的公有成员在派生类中变为私有的;在受保护的继承中,基类的公有成员在派生类中变为受保护的。
派生类可以通过继承来扩展基类的功能,它可以添加新的成员变量和成员函数,也可以重写基类的成员函数以改变其行为。派生类还可以访问基类的非私有成员。
继承的优点:减少代码的冗余 提高代码的重用性
一图让你认识继承和派生的概念~

🍒 二、继承的语法
派生类定义格式:
注意以下两个格式都是一样的,定义以及意义都是相同的!
class 子类: 继承方式 父类名{//子类新增的数据成员和成员函数};Class 派生类名 : 继承方式 基类名{//派生类新增的数据成员和成员函数};
继承方式分类:
public : 公有继承 (重要)
private : 私有继承
protected : 保护继承
基类个数分类:
单继承:指每个派生类只直接继承了一个基类的特征 (一个父类 派生出 一个子类)
多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基
类的特征(多个父类 派生出 一个子类)
注意:
子类继承父类,子类拥有父类中全部成员变量和成员方法(除了构造和析构之外的成员方法),但是在子类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。
派生类继承基类的规则 :

一图让你理解~

🍈三、继承中的构造函数和析构函数
构造和析构的顺序
class Other{public:Other(){cout << "对象成员的构造函数" << endl;}~Other(){cout << "对象成员的析构函数" << endl;}};class Base {public:Base(){cout << "父类的无参构造函数" << endl;}~Base(){cout << "父类中的析构函数" << endl;}};class Son :public Base{public:Son(){cout << "子类的无参构造" << endl;}~Son(){cout << "子类中的析构函数" << endl;}Other ob;//对象成员};void test01(){Son ob1;}
运行结果如下:

一图让你理解~

🍉子类中的构造(重要)
先看以下代码:
父类
class Base{private:int a;public:Base(){cout << "父类的无参构造函数" << endl; }Base(int a){this-> a = a;cout << "父类的有参构造函数" << endl;}~Base(){cout << "父类中的析构函数" << endl;}};
知识点1:
子类会默认调用 父类的 无参构造
子类1:
class Son :public Base{private:int b;public:Son(){cout << "子类的无参构造" << endl;}Son(int b){this->b = b;cout << "子类的有参构造函数int" << endl;}~Son(){cout << "子类中的析构函数" << endl;}};void test01(){ Son ob1(10);}
运行结果:

知识点2:
子类 必须显示 使用初始化列表 调用 父类的有参构造
子类2:
class Son :public Base{private:int b;public:Son(){cout << "子类的无参构造" << endl;}Son(int b){this-> b = b;cout << "子类的有参构造函数int" << endl;}//子类必须用 初始化列表 显示的调用父类的有参构造//父类名称(参数)Son(int a, int b) :Base(a)//显示的调用父类的有参构造{this-> b = b;cout << "子类的有参构造函数 int int" << endl;}~Son(){cout << "子类中的析构函数" << endl;}};void test01(){ //子类 默认 会调用 父类的无参构造//子类必须用 初始化列表 显示的调用父类的有参构造//父类名称+()Son ob2(10, 20);}
运行结果:

🥝四、父类和子类的同名处理
成员变量的处理
1、当 父类和子类 成员变量同名时 在子类就近原则 选择本作用域的子类成员
2、如果在子类中 必须使用父类中的同名成员 必须加上父类的作用域。
栗子:
class Base{//父类的私有数据 一旦涉及继承 在子类中不可见public:int num;public:Base(int num){this-> num = num;cout << "Base有参构造int" << endl;}~Base(){cout << "析构函数" << endl;}};class Son :public Base{private:int num;public:Son(int num1, int num2) :Base(num1){this-> num = num2;cout << "有参构造int int" << endl;}~Son(){cout << "析构函数" << endl;}void showNum(void){//如果在子类中 必须使用父类中的同名成员 必须加上父类的作用域cout << "父类中的num = " << Base::num << endl; //当 父类和子类 成员变量同名时 在子类就近原则 选择本作用域的子类成员cout << "子类中的num = " << num << endl;}};void test01(){Son ob1(10, 20);ob1.showNum();}
运行结果:

成员函数的处理
1、子类继承父类所有成员函数 和成员变量
2、一旦子类 实现了 父类的同名成员函数 将屏蔽所有父类同名成员函数
栗子:
class Base{public:void func(void){cout << "父类中的void func" << endl;}void func(int a){cout << "父类中的int func a = " << a << endl;}};class Son :public Base{public://一旦子类 实现了 父类的同名成员函数 将屏蔽所有父类同名成员函数void func(void){cout << "子类中voidfunc" << endl;}};void test01(){//为啥构造和析构除外?父类的构造和析构 只有父类自己知道该怎么做(构造和析构 系统自动调用)//子类会继承父类所有成员函数(构造和析构函数除外) 和成员变量Son ob1;ob1.func();//ob1.func(10);//err //一旦子类 实现了 父类的同名成员函数 将屏蔽所有父类同名成员函数//如果用户 必须要调用父类 的同名成员函数 必须加作用域ob1.Base::func();//调用父类的void funcob1.Base::func(10);//调用父类的int func}
运行结果:

本文仅仅为对于C++中继承的基础知识,重要的还是在虚函数那一块,下一篇,我会详细的介绍虚函数!希望大家继续支持Thanks♪(・ω・)ノ
感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!
给个三连再走嘛~
相关文章:
【C++】一文带你初识C++继承
食用指南:本文在有C基础的情况下食用更佳 🍀本文前置知识: C类 ♈️今日夜电波:napori—Vaundy 1:21 ━━━━━━️💟──────── 3:23 …...
SDK是什么,SDK和API有什么区别
SDK(Software Development Kit)是一种开发工具包,通常由软件开发公司或平台提供,用于帮助开发人员构建、测试和集成特定平台或软件的应用程序。SDK 包含一系列的库、工具、示例代码和文档,旨在简化开发过程并提供所需的…...
golang中使用chan控制协程并发简单事例
func main() {processNum : 5ch : make(chan struct{}, processNum)for true {ch <- struct{}{}go func() {defer func() {<-ch}()fmt.Println("我是协程", time.Now().UnixNano())time.Sleep(time.Second * 5)}()} } 可以看到,这里每5s会执行一次带…...
好用画流程图软件推荐 excalidraw
作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...
【RP2040】香瓜树莓派RP2040之搭建开发环境(windows)
本文最后修改时间:2022年08月23日 01:57 一、本节简介 本节以树莓派pico开发板为例,搭建windows下的编译环境。 二、实验平台 1、硬件平台 1)树莓派pico开发板 ①树莓派pico开发板 ②micro usb数据线 2)电脑 2、软件平台 …...
基于springboot线上礼品商城
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
开源,微信小程序 美食便签地图(FoodNoteMap)的设计与开发
目录 0 前言 1 美食便签地图简介 2 美食便签地图小程序端开发 2.1技术选型 2.2前端UI设计 2.3主页界面 2.4个人信息界面 2.5 添加美食界面 2.6美食便签界面 2.8 美食好友界面 2.9 美食圈子界面 2.10 子页面-店铺详情界面 2.11 后台数据缓存 2.12 订阅消息通知 2.1…...
kubernetes集群(k8s)之安装部署Calico 网络
目录 安装部署Calico 网络 (一)环境准备 (二)部署docker环境 (三)部署kubernetes集群 (四)部署Calico网络插件 安装部署Calico 网络 (一)环境准备 IP地…...
【C/C++】C++11 Lambda 表达式捕获变量使用技巧
在 C11 中,lambda 表达式可以通过捕获列表来捕获指定的变量。捕获列表是放在 lambda 表达式参数列表之前的一对方括号 [] 中,用来指定 lambda 表达式捕获哪些变量。 捕获列表有以下几种形式: []:不捕获任何变量。[&]&#x…...
大势智慧软硬件技术答疑第八期
1.DasViewer可以使用同一个账号登录多台电脑,然后同时进行格式转换操作吗? 答:可以的 2.在DasViewer里面添加了标注点,能手动修改标注点坐标、手动输入坐标值 吗? 答:目前DasViewer暂不支持手动输入坐标 …...
jvm-jvm与java体系结构
1.JAVA及JVM简介 jvm发展历程 sun classic vm jdk1.4时完全被淘汰 2.虚拟机与JAVA虚拟机 java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行,每一条java指令,java虚拟机中都有…...
Three.js 实现材质边缘通道发光效果
相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. RenderPass(是用于渲染场景的通道。它将场景和相机作为输入,使用Three.…...
【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记
运行时类信息(RTTI) C: ##是拼接 #是替换成字符串 // RTTI.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <afxwin.h>#ifdef _DEBUG #define new DEBUG_NEW #endifCWinApp th…...
ui设计师个人年终工作总结2020最新范文5篇
ui设计师个人年终工作总结(一) 我于20年x育人x日成为公司的试用员工,安排在技术研发中心担任UI界面设计一职,现将我的工作情况分为三个阶段来总结如下汇报: 一、萌芽阶段 记得初次应聘时,我对公司的认识仅仅局限于行业之一&#x…...
开源数据库Mysql_DBA运维实战 (修改root密码)
MySQL——修改root密码的4种方法 本文以windows为例为大家详细介绍下MySQL修改root密码的4种方法,大家可以可以根据的自己的情况自由选择,希望对大家有所帮助 方法1: 用SET PASSWORD命令 首先登录MySQL。 格式:mysql> set pass…...
javap获取Kotlin方法JNI方法签名
获取Kotlin方法签名和JAVA不一样的地方就是需要使用Kotlin 命令行编译器生成.class文件: 编写一个Kotlin类,添加JNI方法: class TestLib {external fun init(callBack: CallBack)interface CallBack{fun onData(count:Int,data:String)} }在…...
ARM-M0内核MCU,内置24bit ADC,采样率4KSPS,传感器、电子秤、体脂秤专用,国产IC
ARM-M0内核MCU 内置24bit ADC ,采样率4KSPS flash 64KB,SRAM 32KB 适用于传感器,电子秤,体脂秤等等...
【STM32】FreeRTOS消息队列和信号量学习
一、消息队列(queue) 队列是一种用于实现任务与任务之间,任务与中断之间消息交流的机制。 注意:1.数据的操作是FIFO模式。 2.队列需要明确数据的大小和队列的长度。 3.写和读都会出现堵塞。 实验:创建一个消息队列…...
初始C语言(6)——详细讲解表达式求值以及其易错点
系列文章目录 第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!) 第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言(3)——…...
【数据结构】树和二叉树
一、树的概念及结构 1、树的概念 树 是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&a…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
