C++继承与菱形继承(一文了解全部继承相关基础知识和面试点!)

news2024/12/23 18:13:01

目的减少重复代码冗余

Class 子类(派生类) : 继承方式 父类(基类)

继承方式共有三种:公共、保护、私有

父类的私有成员private无论哪种继承方式都不可以被子类使用

保护protected权限的内容在类内是可以访问,但是在类外访问不到

保护继承和私有继承的继承方式是并行的,父类的非私有方式全变为保护/私有

子类所占用的内存空间要计算上父类的成员:(private也会被继承下去,只是不可以访问)

上述代码输出是16,即打印子类的内存占用包括了ABCD四个成员的内容

关于 父类和子类的构造和析构顺序:

调用子类时:

父类构造函数   》》》》  子类构造函数   》》》》  子类析构函数 》》》》  父类析构函数

继承同名成员处理方式:

访问子类同名成员, 直接访问即可

访问父类同名成员, 需要加父类作用域

如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数,即使父类中存在独有的函数重载,也不能直接访问

如果想访问到父类中被隐藏的同名成员函数,需要加作用域

继承同名静态成员的处理方式:

与上述一致

访问子类同名成员, 直接访问即可

访问父类同名成员, 需要加父类作用域

与上面不同的是,静态成员不属于任一对象,除了可以通过对象访问还可以直接通过类名访问

总结: 同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式 (通过对象 和 通过类名)

多继承语法:

允许一个类继承多个类,但是开发过程中不建议使用多继承

多继承可能会引发父类中有同名成员出现,需要加作用域区分

菱形继承:

两个派生类继承同一个基类,又有某个类同时继承者两个派生类
这种继承被称为菱形继承,或者钻石继承

                父类

           ↙           ↘

     子类1               子类2     

           ↘                ↙

                子类3

当子类1继承了父类的数据,子类2也继承了父类,当子类3使用数据时,会产生二义性

子类3继承来自父类的数据一共两次,但是实际一次就可以

当菱形继承,对于子类3 来说两个父类(子类1和子类2)拥有相同数据,需要加以作用域区分.但是数据两份资源浪费

解决方案:虚继承可以解决问题,在两个子类(子类1和子类2)继承前加上关键字virtual变为虚继承,父类成为虚基类

当发生虚继承时,共同的数据变成了一份,不会出现不明确的情况,其值按照程序运行顺序取最后的赋值,同时访问共同的数据可以不用在前面加作用域,

即原来:

子类3  zi3;

cout << zi3.子类1:: age<<endl;

cout <<zi3.子类2:: age <<endl;

现在用了虚继承:

cout << zi3.age <<endl; //直接访问即可

 注意:需要在两个继承的子类(子类1和子类2)前面都要加上virtual关键字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes-强制删除命名空间

一、故障现象 1、删除命名空间卡住、强制删除也卡住 2、其他终端显示命名空间下无资源 二、处理步骤 1、kubectl get namespace cilium-test -o json > temp.json 获取你需要删除的命名空间json描述文件。 2、修改finalize字段 3、替换 kubectl replace --raw "/api/v1…

csdn加目录,标题

最简单的办法是&#xff0c; 目录 先写文章&#xff0c; 在给需要加标题的&#xff0c; 给他添加格式为标题一&#xff0c; 在点目录 先写文章&#xff0c; 在给需要加标题的&#xff0c; 给他添加格式为标题一&#xff0c; 最后点目录就会生成目录在文章前面了&#x…

AMD GPU推理:三步让你了解AI推理的游戏规则

我们常听到“AI推理”这个词,但很多朋友可能只了解个大概。如果你对AI有基本的认识,可能会好奇:AMD的GPU怎么在推理中大展拳脚?它跟常见的NVIDIA相比又如何?今天,我们就来聊聊这个问题。你可能在考虑选购GPU或者在项目中使用AMD,本文将带你从实际应用出发,一步步拆解。…

云原生(四十一)| 阿里云ECS服务器介绍

文章目录 阿里云ECS服务器介绍 一、云计算概述 二、什么是公有云 三、公有云优缺点 1、优点 2、缺点 四、公有云品牌 五、市场占有率 六、阿里云ECS概述 七、阿里云ECS特点 阿里云ECS服务器介绍 一、云计算概述 云计算是一种按使用量付费的模式&#xff0c;这种模式…

Stable Diffusion绘画 | 来训练属于自己的模型:炼丹参数调整--步数设置与计算

要想训练一个优质的模型&#xff0c;一定要认识和了解模型训练中&#xff0c;参数的作用和意义。 整个模型训练的过程&#xff0c;参数并不是一成不变的&#xff0c;也没有固定的模板&#xff0c; 当我们修改了模型训练里面的某个参数&#xff0c;很可能就需要连带其他一系列…

USB外设的Device与Host的差异

USB&#xff0c;Universal Serial Bus。 USB协会&#xff1a; USB-IF协会认证&#xff1a;USB IF全称USB Implementers Forum&#xff0c;是由一群开发通用串行总线规范的公司创立的非营利性组织。USB-IF组织的成立旨在推广通用串行总线技术并提供相应的技术规范&#xff0c;…

手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人

在本指南中&#xff0c;您将了解如何从 Android 手机内存中恢复已删除的联系人。Android 诞生、见证并征服了 80% 的智能手机行业。有些人可能将此称为“非常大胆的宣言”&#xff0c;但最近的统计数据完全支持我们的说法。灵活性、高度改进的可用性和快速性是 Android 操作系统…

【C语言】内存函数的使用和模拟实现

文章目录 一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset的使用四、memcmp的使用 一、memcpy的使用和模拟实现 在之前我们学习了使用和模拟实现strncpy函数&#xff0c;它是一个字符串函数&#xff0c;用来按照给定的字节个数来拷贝字符串&#xff0c;那么问…

“衣依”服装销售平台:Spring Boot框架的设计与实现

3系统分析 3.1可行性分析 通过对本“衣依”服装销售平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本“衣依”服装销售平台采用JAVA作为开发语言&#xff…

TOGAF框架在企业数字化转型中从理论到实践的全面应用指南

数字化转型的背景与意义 随着全球技术的快速发展&#xff0c;数字化已成为现代企业生存和发展的核心驱动力。企业数字化转型不仅意味着引入新技术&#xff0c;还要求在业务模式、组织架构和运营方式上进行深度变革。然而&#xff0c;数字化转型的实施通常面临诸多挑战&#xf…

Scrapy 爬虫的大模型支持

使用 Scrapy 时&#xff0c;你可以轻松使用大型语言模型 (LLM) 来自动化或增强你的 Web 解析。 有多种使用 LLM 来帮助进行 Web 抓取的方法。在本指南中&#xff0c;我们将在每个页面上调用一个 LLM&#xff0c;从中抽取我们定义的一组属性&#xff0c;而无需编写任何选择器或…

Python和C++混淆矩阵地理学医学物理学视觉语言模型和算法模型评估工具

&#x1f3af;要点 优化损失函数评估指标海岸线检测算法评估遥感视觉表征和文本增强乳腺癌预测模型算法液体中闪烁光和切伦科夫光分离多标签分类任务性能评估有向无环图、多路径标记和非强制叶节点预测二元分类评估特征归因可信性评估马修斯相关系数对比其他准确度 Python桑…

骨传导耳机哪款好?全网最全的5大精品骨传导耳机测评报告分享

在追求高效运动体验与听觉享受的现代生活里&#xff0c;骨传导耳机以其独特的设计和创新技术吸引了众多用户的目光。相较于传统入耳式耳机&#xff0c;骨传导耳机通过振动头部骨骼而非耳膜来传输声音&#xff0c;不仅提供了更好的佩戴舒适度&#xff0c;还能在一定程度上保持对…

如何使用工具删除 iPhone 上的图片背景

在 iPhone 上删除背景图像变得简单易行。感谢最近 iOS 更新中引入的新功能。如今&#xff0c;iOS 用户现在可以毫不费力地删除背景&#xff0c;而无需复杂的应用程序。在这篇文章中&#xff0c;您将学习如何使用各种方法去除 iPhone 上的背景。这可确保您可以选择最适合您偏好的…

PMP--三模--解题--121-130

文章目录 14.敏捷--产品待办事项列表--敏捷中应对变更的方法就是不断地梳理需求的优先级。--要求产品负责人与客户确定事项的优先级。121、 [单选] 在迭代演示期间&#xff0c;客户注意到他们希望对产品进行改进。团队接下来应该做什么&#xff1f; 9.资源管理--认可与奖励--在…

C语言+单片机

今天内容有点水哈哈&#xff08;忙着练焊铁技术了嘻嘻&#xff09; C语言 简单学习了while语言以及其与for语言的区别和适用方法 .循环结构&#xff1a; 初始化语句条件判断句条件控制句 for语句 for(int1;i<100;i){执行条件} for (int i 1; i < 100; i) {printf(&quo…

YOLOv11改进 | 注意力篇 | YOLOv11引入MSDA多尺度空洞注意力

1. MSDA介绍 1.1 摘要&#xff1a;作为事实上的解决方案&#xff0c;鼓励使用普通视觉变换器&#xff08;ViT&#xff09;对任意图像块之间的远程依赖性进行建模&#xff0c;而全局参与感受野会导致二次计算成本。 Vision Transformers 的另一个分支利用了受 CNN 启发的局部注…

【Qt】控件概述 (1)

控件概述 1. QWidget核心属性1.1核心属性概述1.2 enable1.3 geometry——窗口坐标1.4 window frame的影响1.4 windowTitle——窗口标题1.5 windowIcon——窗口图标1.6 windowOpacity——透明度设置1.7 cursor——光标设置1.8 font——字体设置1.9 toolTip——鼠标悬停提示设置1…

征程6 工具链常用工具和 API 整理(含新手示例)

1.引言 征程6 工具链目前已经提供了比较丰富的集成化工具和接口来支持模型的移植和量化部署&#xff0c;本帖将整理常用的工具/接口以及使用示例来供大家参考&#xff0c;相信这篇文章会提升大家对 征程6 工具链的使用理解以及效率。 干货满满&#xff0c;欢迎访问 2.hb_con…

Windows 10再次成为Steam上最受欢迎的操作系统 Linux用户比例略有下降

上个月&#xff0c;Valve平台上使用Windows 11的玩家自三年前推出以来首次取代了 Windows 10。 然而&#xff0c;这一变化是短暂的–仅仅一个月后&#xff0c;Windows 10 又回到了第一的位置&#xff0c;但持续时间也可能不会太长。 根据 Valve 的数据&#xff0c;64 位 Window…