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

什么是继承

提示:继承基础概念

文章目录

  • 一、继承
    • 1.1 基础概念
    • 1.2 继承作用与继承方式
    • 1.2 继承中的隐藏
    • 1.3 类中构造、析构在继承方面知识
    • 1.4 继承知识拓展


一、继承

1.1 基础概念

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类,继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。

1.2 继承作用与继承方式

//继承定义-派生类 : 继承方式-基类
class Student:public Person
类成员/继承方式public继承protected继承private继承
基类的public成员派生类的public成员派生类的protected成员派生类的private成员
基类的protected成员派生类的protected成员派生类的protected成员派生类的private成员
基类的private成员派生类中不可见派生类中不可见派生类中不可见

继承又分类为继承方式与访问限定。
继承与访问都适用于向下兼容。
总结:

  1. 基类private(私有)成员在派生类中无论以什么方式继承都是不可见的,这里的不可见是指基类的私有成员还是被继承到派生类对象中,但语法上限制派生类对象不管在类里面还是类外面都不能去访问它。
  2. 基类中不想再类外直接被访问,又需要再派生类中能访问,就可以定义为protected(保护)。保护成员限定符是因为继承才出现的。protected:一种VIP机制,限定了一部分人的访问权限,又让另一部分人可以访问到。
  3. 基类除了私有成员其他成员都是向下兼容的。
  4. 实际中多用public,protected与private意义不大。

1.2 继承中的隐藏

概念:如果子类和基类存在相同名称的成员,当使用派生类对象想用该同名称的成员时,优先调用的是子类的,基类的无法直接被调用到,相当于子类将基类中同名成员屏蔽了。
同名隐藏需要注意的点:
基类与子类的关系,且隶属于不同的作用域,若想要通过子类对象调用相同名称的基类成员,必须在该成员前加基类名称以及作用域限定符。
**成员变量隐藏:**只与成员变量名是否相同有关,与成员变量类型是否相同无关。
**成员函数隐藏:**只与函数名是否相同有关于幻术原型是否相同无关。

1.3 类中构造、析构在继承方面知识

派生类对象构造时:
虽然是派生类构造,但是会有优先构造基类对象的成员函数,函数调用的过程 调用派生类构造函数–>然后再派生类构造函数初始化列表的位置调用基类构造函数,完成基类部分成员的初始化工作–>然后才执行派生类构造函数函数体。
当无实例化的基类或派生类构造函数时,因为是类的默认成员函数所以,会自动生成默认成员函数
派生类对象析构时:
析构哪个类的对象,编译器就会调用那个类的析构函数,析构的过程是先调用派生类的析构函数,完成派生类中资源的清理,然后编译器再派生类析构函数最后一句插入call基类析构函数的汇编指令,才会执行基类的析构函数以完成清理。
派生类析构–>基类析构

1.4 继承知识拓展

继承有非常多种的方式例如:
单继承、多继承、菱形继承、虚拟继承、菱形虚拟继承
**单继承:**普通继承方式
**多继承:**指一个类可以继承多个父类特征,从而复用这些父类的组成于方法,或扩展父类的功能。
**菱形继承:**多继承的一种,菱形继承是一种错误的类继承使用方式,指的是再类中有部分继承过程产生了像菱形一样的继承关系。这样在使用类D时,类D中就会有两份类A的关系链路,就会出现名称冲突了,内存浪费,二意性等等的问题。
在这里插入图片描述

// 同时还会引发更大的问题 二义性
#include <iostream>class person
{
public:std::string _name;
};
class student : public person
{
protected:int _num;
};
class teacher : public person
{
protected:int _id;
};
class start : public student, public teacher
{std::string _course;
};int main()
{// 二义性的由来start a;错误 --> a._name = "zhangsan";只能 --> a.student::_name = "xxx";或者 --> a.teacher::_name = "yyy";return 0;
}

专职赋值才可以
在这里插入图片描述

**虚拟继承:**虚拟继承是C++中为了解决菱形继承而出现的,虚拟继承的实现方式

class A{
// A成员
}
class B : virtual public A{
// B成员
}
class C : virtual public A{
// C成员
}
class D : public B,public C{
// D成员
}
---------------------------------------------------
class person
{
public:std::string _name;
};
class student : virtual public person
{
protected:int _num;
};
class teacher : virtual public person
{
protected:int _id;
};
class start : public student, public teacher
{std::string _course;
};int main()
{start a;a._name = "zhangsan"; // 当为虚拟继承时,可以正常编译//a.student::_name = "xxx";//a.teacher::_name = "yyy";return 0;
}

在这里插入图片描述
虚拟继承在派生类中使用virtual来指定虚拟继承,它保证了在派生类中只有一份共享的基类子对象。

相关文章:

什么是继承

提示&#xff1a;继承基础概念 文章目录 一、继承1.1 基础概念1.2 继承作用与继承方式1.2 继承中的隐藏1.3 类中构造、析构在继承方面知识1.4 继承知识拓展 一、继承 1.1 基础概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许在保持原有类特性…...

QT连接数据库

目录 数据库 数据库基本概念 常用的数据库 SQLite3基础 SQLite特性&#xff1a; QT连接数据库 1.1 QT将数据库分为三个层次 1.2 实现数据库操作的相关方法 sql语句&#xff08;常用&#xff09; 1&#xff09;创建表格 2&#xff09;删除表格 3&#xff09;插入记录 …...

navicat访问orcal数据库

1&#xff09;因为不能直接访问服务器&#xff0c;所以通过中介进行了端口转发&#xff1b; 2&#xff09;依然不能访问&#xff0c;提示netadmin权限什么错误&#xff1b; 3&#xff09;下载了一个 PLSQL Developer 13.0.0.1883 版本&#xff0c;自带的instantclient 好像不…...

Linux中查找某路径下,包含某个字符串的所有文件

path表示需要查找的路径&#xff0c;string表示需要包含的字符\字符串 grep -rnw path -e "string"只查找包含特定string的所有.c和.h文件 grep --include\*.{c,h} -rnw -rnw path -e "string" 除去所有.o文件&#xff0c;查找其他文件是否包含特定strin…...

常见信号滤波方法(卡尔曼滤波、滑动平均、异常值剔除)的原理解析与C语言实现

常见信号滤波方法&#xff08;卡尔曼滤波、滑动平均、异常值剔除&#xff09;的原理解析与C语言实现 日期作者版本备注2023.09.04Dog TaoV1.0完成文档的初始版本。 文章目录 常见信号滤波方法&#xff08;卡尔曼滤波、滑动平均、异常值剔除&#xff09;的原理解析与C语言实现前…...

WebGL模型矩阵

前言&#xff1a;依赖矩阵库 WebGL矩阵变换库_山楂树の的博客-CSDN博客 先平移&#xff0c;后旋转的模型变换&#xff1a; 1.将三角形沿着X轴平移一段距离。 2.在此基础上&#xff0c;旋转三角形。 先写下第1条&#xff08;平移操作&#xff09;中的坐标方程式。 等式1&am…...

Flutter:WebSocket封装-实现心跳、重连机制

前言Permalink Flutter简介 Flutter 是 Google推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App&#xff0c;一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口&#xff0c;开发者可以很快地为 F…...

c语言中:struct timespec

在C语言中&#xff0c;struct timespec 是一个结构体&#xff0c;通常用于处理时间和时间间隔。这个结构体通常包含以下两个成员&#xff1a; tv_sec&#xff1a;这是一个长整型&#xff08;long&#xff09;&#xff0c;用于存储秒数。它表示时间的整数部分&#xff0c;即秒数…...

Mendix如何实现导出文件

刚刚接触Mendix低代码两周&#xff0c;花了一周在b站看初级视频然后考完初级&#xff0c;第二周开始做个列表查询感觉照葫芦画瓢没啥难度。但最近要求写个导出列表数据&#xff0c;在mendix社区翻了翻&#xff0c;这个功能算是常见的。找了mendix官方提供的Docs磕磕盼盼才实现了…...

在IIS服务器上安装SSL证书(2023配置启用HTTPS部署教程)内容来源SSL市场网

https://www.sslmarket.com.cn/146.html...

如何处理ChatGPT与用户之间的互动和反馈?

处理ChatGPT与用户之间的互动和反馈是关于改进和优化用户体验的关键方面。这涉及到在聊天、对话和交互中建立积极的用户关系&#xff0c;同时利用用户的反馈来不断改进ChatGPT的性能和功能。本文将探讨如何有效地处理ChatGPT与用户之间的互动和反馈&#xff0c;以提供更好的用户…...

微服务-gateway鉴权

文章目录 一、前言二、gateway鉴权1、依赖配置2、编写代码3、GlobalFilter详解3.1、GlobalFilter简介3.2、GlobalFilter自定义执行顺序3.2.1、实现Order接口实现自定义执行顺序 一、前言 网关是介于客户端和服务器端之间的中间层&#xff0c;所有的外部请求都会先经过 网关这一…...

NET7快速开发一个商品管理模块-商品列表开发(一)

商品管理模块&#xff0c;一般包含以下几个模块&#xff1a; 商品列表&#xff1a;这里可以看到所有已发布的商品信息列表。 商品管理&#xff1a;添加商品、编辑商品以及删除商品。 具体功能如下图&#xff1a; 1.商品列表 2.添加商品 3.商品SKU编辑...

0829|C++day7 auto、lambda、C++数据类型转换、C++标准模板库(STL)、list、文件操作

一、思维导图 二、【试编程】将实例化类对象写入容器后&#xff0c;写入.txt文本中&#xff0c;再重新定义一个类容器&#xff0c;将.txt中的内容读取出来&#xff0c;输出到终端 封装一个学生的类&#xff0c;定义一个学生这样类的vector容器, 里面存放学生对象&#xff08;至…...

SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】

文章目录 一、数据库表二、引入依赖三、修改配置文件四、公共组件1、BaseController2、BaseService3、IService4、BaseMapper 五、代码1、Application2、Student实体类3、Controller4、Service5、ServiceImpl6、Mapper7、Mapper.xml 一、数据库表 CREATE TABLE student (id i…...

node基础之三:http 模块

// 1. 导入模块 const http require("http"); // 2. 创建服务 const server http.createServer((request, response) > {// 获取请求方法request.method;// 获取请求 url&#xff08;只包含url中的路径和查询字符串&#xff09;request.url;// 获取 HTTP 协议版…...

【高阶数据结构】AVL树 {概念及实现;节点的定义;插入并调整平衡因子;旋转操作:左单旋,右单旋,左右双旋,右左双旋;AVL树的验证及性能分析}

AVL树 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明…...

Netty—FuturePromise

Netty—Future&Promise 一、JDK原生 Future二、Netty包下的 Future三、Promise1、使用Promise同步获取结果2、使用Promise异步获取结果.3、使用Promise同步获取异常 - sync & get4、使用Promise同步获取异常 - await5、使用Promise异步获取异常 在异步处理时&#xff0…...

固定资产卡片乱怎么管理

固定资产卡片是记录公司固定资产信息的重要工具&#xff0c;如果管理不善&#xff0c;容易造成卡片混乱、数据错误等问题。 为了避免这种情况的发生&#xff0c;可以采取以下措施&#xff1a;  建立完善的资产管理制度&#xff0c;明确固定资产的分类、标准和使用情况&#x…...

AutoHotkey(AHK)脚本,自动截图当前屏幕并发送给微信窗口

前提先安装好 AutoHotkey &#xff0c;本脚本依赖AutoHotkey 环境 首先 &#xff0c;设置微信的快捷键 执行代码如下&#xff1a; Loop {SendInput, {Alt down}s{Alt up}Sleep, 2000 ; 等待2秒; 双击鼠标左键Click, 2Sleep, 1000 ; 等待1秒SendInput, {Alt down}a{Alt up}Sl…...

Phi-3 Forest Laboratory操作系统知识问答系统:从进程管理到文件系统详解

Phi-3 Forest Laboratory操作系统知识问答系统&#xff1a;从进程管理到文件系统详解 你有没有过这样的经历&#xff1f;翻开一本厚厚的操作系统教材&#xff0c;满篇都是“进程调度算法”、“虚拟内存”、“文件系统结构”这些抽象概念&#xff0c;看得人头晕眼花。或者&…...

深度解析:数据仓库——定义、核心架构与企业核心价值

深度解析&#xff1a;数据仓库——定义、核心架构与企业核心价值一、引言二、定义&#xff1a;什么是数据仓库&#xff1f;2.1 标准定义2.2 核心四大特征&#xff08;数据仓库基石&#xff09;三、架构流程&#xff1a;数据仓库的标准工作流程&#xff08;带流程图&#xff09;…...

如何用Bypass Paywalls Clean突破付费墙限制?技术解析与实战指南

如何用Bypass Paywalls Clean突破付费墙限制&#xff1f;技术解析与实战指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容付费墙日益严密的今天&#xff0c;Bypass Payw…...

3步解锁网易云音乐:ncmdumpGUI让你的NCM文件重获自由

3步解锁网易云音乐&#xff1a;ncmdumpGUI让你的NCM文件重获自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的烦恼&#xff1f;在网…...

告别重复造轮子:用快马AI一键生成openclaw项目高效串口调试工具

在机器人开发过程中&#xff0c;串口通信是最基础也最频繁使用的功能之一。无论是传感器数据采集、电机控制指令下发&#xff0c;还是与各种硬件模块的交互&#xff0c;都离不开串口通信的支持。然而每次新项目都要从头实现串口通信功能&#xff0c;不仅浪费时间&#xff0c;还…...

【flash-attn安装成功却import失败?一个ABI参数引发的‘血案’】

1. 为什么flash-attn安装成功却import失败&#xff1f; 最近在部署Llama2模型时&#xff0c;遇到了一个让人抓狂的问题&#xff1a;明明用pip安装了flash-attn&#xff0c;执行import时却报错提示找不到这个包。更诡异的是&#xff0c;pip list明明显示安装成功了&#xff0c;…...

别再用Delay了!用GD32的TIMER5实现精准1ms定时,让你的嵌入式程序更高效

告别阻塞式延时&#xff1a;用GD32 TIMER5构建高效嵌入式系统心跳 在嵌入式开发中&#xff0c;时间管理如同系统的心跳&#xff0c;决定了整个应用的响应速度和执行效率。许多开发者习惯使用delay_ms()这类阻塞式延时函数&#xff0c;却不知这会让CPU陷入无意义的等待状态&…...

3步突破AI编程助手限制:免费解锁Cursor Pro高级功能全指南

3步突破AI编程助手限制&#xff1a;免费解锁Cursor Pro高级功能全指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your…...

DocRes实战指南:高效统一文档图像修复任务的完整解决方案

DocRes实战指南&#xff1a;高效统一文档图像修复任务的完整解决方案 【免费下载链接】DocRes [CVPR 2024] DocRes: A Generalist Model Toward Unifying Document Image Restoration Tasks 项目地址: https://gitcode.com/gh_mirrors/do/DocRes DocRes是一个革命性的通…...

Java外部函数接口不是“能用就行”——从内存泄漏、线程崩溃到ABI不兼容,这9类致命缺陷正在 silently 摧毁你的微服务

第一章&#xff1a;Java外部函数接口&#xff08;JEP 454&#xff09;核心原理与演进脉络Java外部函数接口&#xff08;Foreign Function & Memory API&#xff0c;JEP 454&#xff09;标志着Java平台原生互操作能力的根本性重构。它取代了长期受限且易出错的JNI&#xff0…...