笔试面试题——继承和组合

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、什么是菱形继承?菱形继承的问题是什么?
  • 二、什么是菱形虚拟继承?如何解决数据冗余和二义性的?
  • 三、继承和组合的区别?什么时候用继承?什么时候用组合?


一、什么是菱形继承?菱形继承的问题是什么?

菱形继承简单来说就是:
两个子类继承同一个父类,而又有子类同时继承这两个子类。

菱形继承的问题是:
数据冗余和二义性,由于最底层的派生类继承了两个基类,同时这两个基类又继承了同一个基类,故而会造成最顶部基类的两次调用,会造成数据冗余及二义性问题。


二、什么是菱形虚拟继承?如何解决数据冗余和二义性的?

菱形虚拟继承是:
虚拟继承可以解决菱形继承的二义性和数据冗余的问题。

菱形虚拟继承是靠:在继承之后,并不会创造出两个基类成员给派生类各自继承,而是在派生类中创建一个虚基表来记录偏移量,大小为从派生类继承的基类成员地址到真正基类成员地址。


三、继承和组合的区别?什么时候用继承?什么时候用组合?

继承和组合的区别是: 其一

public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。
组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。

继承和组合的区别是: 其二

继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见 。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。

对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复 用(black-boxreuse),因为对象的内部细节是不可见的。对象只以“黑箱”的形式出现。组合类之间没有很强的依赖关系,耦合度低。优先使用对象组合有助于你保持每个类被 封装。

当两个类或多个类之间是is-a的关系的时候 :
继承
当两个类或多个类之间是has-a的关系的时候:
组合


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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 最新版1.75.0升级记

升级方法 稳定版 C:\>rustup update stable info: syncing channel updates for stable-x86_64-pc-windows-msvc info: latest update on 2023-12-28, rust version 1.75.0 (82e1608df 2023-12-21) info: downloading component cargo 5.9 MiB / 5.9 MiB (100 %) 3.…

ASP.NET摄影展示网站源码

ASP.NET摄影展示网站源码 项目描述 网站利用了ext技术,用户自定义了展示控件 前台展示类别有: 协会动态,摄影理论,影展影赛,采风路线, 影友之窗,佳作欣赏,器材专区,展览信…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

全网最全的AI智能工具,想要什么都有,各种分类整理累计上万个,主打的就是一个免费

全网最全的AI智能工具,想要什么都有,各种分类整理累计上万个,主打的就是一个免费。 一、toolify https://www.toolify.ai/zh/ 二、AIbot https://ai-bot.cn/ 三、ai55 https://cc.ai55.cc/ 随便点一个都可以免费使用: https:…

车规MCU开发之E2E协议

啥是E2E? E2E的原理: 1. 发送端:发送数据包添加E2E保护头 2. 接收端:接收数据包校验E2E保护头 E2E例子 - profile 11为例 E2E_P11ConfigType wk_stP11Cfg { .CounterOffset 8, .CRCOffset 0, .DataID …

msvcp140.dll丢失的常见问题,msvcp140.dll丢失的几种解决办法分享

在电脑系统中,msvcp140.dll是一个重要的系统文件,其作用是为应用程序提供所需的功能和支持。然而,有时候我们可能会遇到msvcp140.dll文件丢失的情况,导致我们无法正常使用某些程序或游戏。本文将介绍msvcp140.dll丢失的常见问题、…

【国产之光】开年尝鲜——优秀的AI编码助手 Fitten Code

文章目录 前言1. 工具准备1.0 事先说明1.1 VSCode1.2 Fitten Code1.3 GitHub Copilot 2. 使用测评2.1 需求理解2.2 上下文理解 3. 总结推荐链接 开年尝鲜高质量国产AI编码助手——FittenCode 前言 2024年刚刚开局,清华大学 与 非十科技 就发布了全新的 VSCode AI…

MySql前言

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 数据库有哪些软件?? Mysql MySql数…

力扣120. 三角形最小路径和(Java 动态规划)

Problem: 120. 三角形最小路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来,具体的思路: 1.记录一个int类型的大小的 n 乘 n n乘n n乘n的数组(其中 n n n为…

如何在Linux部署OpenGauss数据管理系统并实现固定公网地址访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

机器学习+大数据项目

一、特征工程 特征清洗 特征监控 特征选择 计算每一个特征和响应变量的相关性 通过L1正则项来选择特征 训练能对特征打分的预选模型 通过特征组合后再来选择特征 通过深度学习来进行特征选择

fastadmin 框架如何移除图片上传后预览中的删除按钮

在FastAdmin中,当我们启用了图片上传预览时,在预览区域会自动生成预览图和删除按钮,如下图: 如果我们想上移除掉这里的删除按钮,则需要启用自定义预览模板的功能。 首先我们找到视图中我们的预览容器,比如…