被遗弃的多重继承

news2024/10/7 15:18:49

问题

C++ 是否允许一个类继承自多个父类?

C++ 支持编写多重继承的代码

一个子类可以拥有多个父类

子类拥有所有父类的成员变量

子类继承所有父类的成员函数

子类对象可以当作任意父类对象使用

多重继承的语法规则

多重继承的本质与单继承相同!

通过多重继承得到的对象可能拥有 "不同的地址" !!!

解决方案:无

多重继承可能产生冗余的成员

当多重继承关系出现闭合时将产生数据冗余的问题!!!

解决方案:虚继承

虚继承能够解决数据冗余问题

中间层父类不再关心顶层父类的初始化

最终子类必须直接调用顶层父类的构造函数

问题:

当架构设计中需要继承时,无法确定使用直接继承还是虚继承!!

多重继承可能产生多个虚函数表

需要进行强制类型转换时,C++ 中推荐使用新式类型转换关键字!!

解决方案:dynamic_cast

工程开发中的 "多重继承" 方式:

单继承某个类 + 实现 (多个) 接口

一些有用的工程建议

先继承一个父类,然后实现多个接口

父类中提供 equal() 成员函数

equal() 成员函数用于判断指针是否指向当前对象

与多重继承相关的强制类型转换用 dynamic_cast 完成

小结

C++ 支持多重继承的编码方式

多重继承容易带来问题

  • 可能出现 "同一个对象的地址不同" 的情况
  • 虚继承可以解决数据冗余的问题
  • 虚继承使得架构设计可能出现问题

多继承中可以出现多个虚函数表指针

与多继承相关的强制类型转换用 dynamic_cast 完成

工程开发中采用 "单继承多接口" 的方式使用多继承

父类提供成员函数用于判断指针是否指向当前对象

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

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

相关文章

ChatRWKV 学习笔记和使用指南

0x0. 前言 Receptance Weighted Key Value(RWKV)是pengbo提出的一个新的语言模型架构,它使用了线性的注意力机制,把Transformer的高效并行训练与RNN的高效推理相结合,使得模型在训练期间可以并行,并在推理…

基于Java的代驾管理系统 springboot+vue,mysql数据库,前台用户、商户+后台管理员,有一万五千字报告,完美运行

基于Java的代驾管理系统 springbootvue,mysql数据库,前台用户、商户后台管理员,有一万五千字报告,完美运行。 系统完美实现用户下单叫车、商户接单、管理员管理系统,页面良好,系统流畅。 各角色功能&#x…

GPT能否辅助数学学习

GPT4.0的数学能力怎么样?我们使用镜像站进行实验,通过不同水平的数学看看GPT4.0的数学能力得到进步没有。镜像站的地址我们放在了最后,各位读者也可以自行去测试。 笔者在ChatGPT镜像站进行测试,我们的实验是让GPT4.0自行出数学题…

记本地新建一个gradle方式springboot项目过程

打算使用gradle在idea新建个springboot项目,然后坑很多,记录一下 原来我的idea应该是社区版,新建项目时候没有可以选择spring相关配置,然后卸载了重装,之前问题是启动是启动起来了,但是状态栏那边一直显示…

招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部…

TCP连接分析:探寻TCP的三次握手

文章目录 一、实验背景与目的二、实验需求三、实验解法1. 预先抓包监测使用Wireshark工具2.进行TCP三次握手,访问www.baidu.com3.分析Wireshark捕获的TCP包 摘要: 本实验使用Wireshark工具,通过抓包监测和分析,深入研究了与百度服…

Richtek立锜EPS助力转向系统方案

Richtek立锜EPS助力转向系统方案包含一个集成的位置控制模块,用来接收一个外部系统(泊车模块)的角度请求以实现控制EPS系统自动转向的功能。外部交互接口用作与外部泊车模块进行CAN通讯,以支持泊车模块的控制状态的切换和输入角度…

nextTick原理

nextTick 是 Vue 提供的一个异步方法,用于在 DOM 更新之后执行回调函数。它的原理是利用 JavaScript 的事件循环机制来实现异步执行。 具体来说,当我们调用 nextTick 方法时,Vue 会将传入的回调函数添加到一个队列中。在下一个事件循环中&am…

Linux Input子系统

一、基本概念 按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。本质属于字符设备。 1. input子系统结构如下: input 子系统分为 input 驱动层、input 核心层、input 事件处理层&…

重庆旅游攻略

重庆旅游攻略 白天 鹅岭二厂 (1)地铁线路: 1号线鹅岭站 川美涂鸦一条街 (1)地铁线路: 黄桷坪正街 湖广会馆 3. 长江索道 需要预约 门票:单程20元,往返30元 4. 重庆动物园 …

Mysql 事物与存储引擎

MySQL事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样&#…

MMSegmentation训练自己的语义分割数据集

全流程,训练语义分割数据集 数据标注json转mask 运行源码MMSegmentation模型选择运行部分 数据标注 # 安装 pip install labelme # 启动labelme labelme然后 ctrl N 开启多边形标注即可,命名类为person 之后会保存到同目录下json文件: js…

ioctl、printk及多个此设备支持

一、ioctl操作实现 ioctl(Input/Output Control)是一个在 Unix-like 操作系统中的系统调用,用于控制设备或文件的各种操作。它允许用户空间程序与内核空间进行交互,执行一些特定的设备控制、状态查询或其他操作,而不必…

Java“魂牵”京东商品详情描述数据,京东商品详情API接口,京东API接口申请指南

要通过京东的API获取商品详情描述数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情: 首先,确保您已注册成为京东开放平台的开发者,并创…

Springboot整合MyBatisPlus框架操作MySQL

1、MyBatis-Plus概述 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 【技术储备】 拥有 Java 开发环境以及相应 IDE…

elasticsearch8.9.1集群搭建

目录 1.官网文档 2.安装步骤 2.1 环境准备 2.2 添加用户 2.3 修改文件profile文件 2.4 修改elasticsearch.yml 2.5 修改 sysctl.conf 3.启动 3.1 切换到kibana 3.2 启动elasticsearch 3.3 启动kibana 3.4 验证节点情况 1.官网文档 elasticsearch文档:ht…

漏洞发现-web应用发现探针类型利用

关于在真实环境下面,这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms,discuz,wordpress等源码结构,这些都是网上比较知名的php源码的cms的名称,这是我们在国内常见的几个程序&#xf…

常见的数据结构之队列

一、介绍 队列(Queue)是一种常见的数据结构,用于存储和管理一系列数据元素,其中元素按照 先进先出(First-In-First-Out,简称FIFO)的原则进行插入和删除。 队列可以类比为现实生活中排队等候的场景,例如在超市收银台排队购物的顾客队列。 二、队列的基本操作 2.1 出…

接口优化通用方案

目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想:批量操作数据库 优化前: //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后: batchInsert(transDetailList); 异步、回…

CSAPP的Lab学习——DataLab

文章目录 前言一、bitXor(异或)二、tmin(最小的二进制补码)三、isTmax(判断是否为最大值)四、allOddBits(判断奇数位是否都是1)五、negate(计算相反数)六、is…