C++知识点12:继承和组合

Camera HAL 多线程管理详解 本文摘要:Camera HAL 采用双线程管理体系(CAMX与CHI-CDK)实现高效并发处理。CAMX ThreadManager负责HAL内部及框架交互,采用线程池+任务调度机制,将节点处理、回调等封装为Job异步执行;CHI ThreadManager专注于OEM定制逻辑,支持异步/同步两种作业模式。两套系统通过函数指针解耦但共享地址空间,共同实现硬件流水线的强实时性。文章详细解析了两者的类层次架构、核心数据结构及典型应用场景,并提供了问题排查的代码切入点,为Camera HAL开发与性能优化提供指导 阅读详情

继承特性:

依据一个或多个基类来定义一个新的派生类(子类获得父类特性)

作用:

程序易于创建和维和;重用代码功能;提高执行时间(创建新类时不需要重新编写新的数据成员和成员函数)

继承控制访问:

派生类可以访问基类中所有的非私有成员,一个派生类继承了所有的基类方法,但下列情况除外:
基类的构造函数、析构函数和拷贝构造函数。
基类的重载运算符。
基类的友元函数

继承类型:

1.公有继承public:基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员(保护成员用派生类的成员函数访问)
2.保护继承protected:基类的公有和保护成员将成为派生类的保护成员
3.私有继承private:基类的公有和保护成员将成为派生类的私有成员

继承内存空间分布:

按成员变量的声明顺序分布内存。
单继承内存分布:
这里写图片描述
每个派生类复制一份基类的成员变量。基类的数据放在派生类之前。派生类指针B和基类指针A指向同一个地址。
多继承内存分布:
这里写图片描述
派生类分别拷贝两个基类的成员变量。基类A的指针和派生类C的指针指向同一个位置,基类B的指针指向不同。(派生类和基类之间偏移量固定)
虚继承内存分布:
由于派生类和虚基类之间偏移量不固定,所以需要在类中定义一个虚基类表指针,存储类中对象指针和虚基类表指针之间的偏移量。
虚基类表指针->指向偏移量表->偏移量表中存储对象指针与虚基类表指针之间的偏移量

class A
class B:public virtual A

这里写图片描述
如图所示,对象B的指针和虚基类表指针重合,所以虚基类表指针和对象B指针偏移量为0;
对象A指针和虚基类指针之间隔着一个虚基类指针和派生类B的成员变量,因此偏移量为虚基类指针+派生类成员变量内存

class A;
class B:public virtual A;
class C:public virtual A;
class D:public B,public C;

其中class B:public virtual A
这里写图片描述
class C:public virtual A
这里写图片描述
class D:public B,public C
这里写图片描述

多继承:

一个子类可以有多个父类,它继承了多个父类的特性

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

多继承的优缺点:

缺点:多重继承情况下成员访问的二义性
优点:重复利用

多个父类中有同名函数,如何确定子类覆盖哪一个父类的函数?使用形式“类名::函数名”

class A{void foo()};
class B{void foo()};
class C:pubilc A,public B{};

C c;
c.A::foo();
c.B::foo();

虚继承:

这里写图片描述
类C继承类A和类D,而类A和类D都继承类B,因此在类C中存在两份类B的拷贝。即浪费存储空间;又存在二义性。虚继承节省内存空间。

虚继承形式:

B是虚基类,类A和类D对B虚继承,类C多重继承

class B;
class A:public virtual B;
class D:public virtual B;
class C:public A,public D;
};

组合:

在逻辑上A是B的一部分,则不允许B从A派生,而是要用A和其它东西组合出B
重用原类的内部实现即原类是新类的一部分用组合;
若需要原类的内部实现还要重用接口用继承
P151代码

30天入门 SAP BTP 开发系列之四:SAP BTP 控制台里 Global Account 的常规操作介绍 笔者前一篇文章,介绍了 SAP BTP 中 Global Account 的概念。本文咱们一起来看看 SAP BTP 控制台里,给 Global Account 开放了哪些操作功能。 阅读详情

相关推荐

什么是继承?什么是组合?为何说要多用组合少用继承?

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。/*** 动物System . out . println("呼气...吸气...");} } /*** 飞行动物* 继承,可以获得父类属性和方法System . out . println("飞行...");} }组合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能。/*** 动物。

秃了也弱了 3963

手把手教你用STM32标准库写一个能OTA升级的Bootloader(附完整代码)

本文详细介绍了如何使用STM32标准库开发支持OTA无线升级的Bootloader系统,包括Flash分区规划、Bootloader核心实现、无线升级流程及安全校验机制。通过实战代码示例,帮助开发者快速掌握STM32固件升级技术,提升物联网设备的远程维护能力。

weixin_30181209的博客 263

继承、组合

不使用继承: 使用继承:

无问西东的博客 1351

如何用Lmcache+vllm优化KVcache存储?CPU与SSD性能实测对比

本文通过实测对比,详细介绍了如何利用Lmcache+vLLM将大模型推理中的KV Cache卸载至CPU内存或SSD硬盘,以解决长上下文场景下的GPU显存瓶颈。测试数据显示,CPU卸载方案在首字延迟(TTFT)上显著优于SSD方案,但SSD方案在存储成本上更具优势。文章提供了完整的配置指南、性能数据分析和生产环境选型建议。

fire9的博客 987

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 660

继承与组合(Java详解)

继承,super,组合,重写,转型

m0_61359105的博客 2094

uniapp(全端兼容) - 实现点击输入框时完美顶起键盘,获取键盘高度动态计算顶起距离,解决软键盘弹出时输入框被覆盖问题,uniapp微信小程序/移动端h5网页/安卓苹果app(示例代码,一键复制

uniapp,支付宝微信小程序,移动端H5网页网站,软键盘弹出位置不对,软键盘挡住了输入框怎么办,获取键盘高度计算弹出距离,uniapp如何解决输入框input激活后键盘弹出遮挡问题,uniapp输入框偶尔被键盘遮挡,解决uniapp在App环境下输入框被软键盘遮挡的问题,uniapp 完美解决苹果和安卓input框遮挡兼容问题,uniapp输入框拉起软键盘时,输入框显示不全,被软键盘挡住一半,input被键盘遮挡的解决方案,软键盘遮挡输入框,uniapp软键盘顶不起来输入框,输入框没有被软键盘弹出来怎么办

✅ 精选推荐文章 1万+

Java——继承和组合

java的重要特点——继承,快来学习!!!

2301_81375781的博客 1743

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

QGIS将经纬度坐标转成点

QGIS绘制一张地图

weixin_46713695的博客 6056

组合与继承

组合 如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题] 解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。 根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。 ...

邵光亮的博客 2420

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

【C++】类的继承和组合

本文详细讲解了 C++ 中的继承与组合,包括继承的基本概念、三种继承方式(public、protected、private)、继承后成员访问权限变化、构造与析构顺序、函数名隐藏等关键知识点。同时介绍了类的组合(Composition)及继承与组合结合的使用场景

weixin_56167571的博客 1903

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ 继承与组合的区别

C++ 程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。

Doublelv 的博客专栏。 7140

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

c++ 继承 和 组合

下⾯我们看到Person是基类,也称作父类。man是派生类,也称作子类。(因为翻译的原因,所以既叫基类/派生类,也叫父类/子类)继承的结构。

be_a_big_cattle的博客 1471

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

第五章:C++继承和组合

在 C++ 中,允许一个类(称为派生类或子类)从另一个类(称为基类或父类)中继承成员和函数。继承使得派生类可以复用基类的功能,并且可以在此基础上添加新的成员和函数,从而实现代码的复用和扩展。

weixin_63716012的博客 1443

C++:组合、继承与多态

class 基类名virtual 返回值类型 将要在派生类中重载的函数名(参数列表);例如,用虚函数修改上例class Apublic:public:public:i.play();tune(b);C c;tune(c);A* p = &b;tune(*p);p = &c;tune(*p);A a;tune(a);return 0;

weixin_45652283的博客 1298

C++继承与组合完结

很多人说 C++ 语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。多继承可以认为是 C++ 的缺陷之一,很多后来的语言都没有多继承,如 java。继承和组合public 继承是一种 is-a 的关系。也就是说每个派生类对象都是一个基类对象。组合是一种 has-a 的关系。假设 B 组合了 A,每个 B 对象中都有一个 A 对象。

popingcat的博客 1224

C++继承与组合的区别

1、继承与组合 2、继承和组合的使用场景 3、继承和组合的区别 4、继承和组合的优缺点 (1)继承的优缺点 (2)组合的优缺点 1、继承与组合 C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一...

蓬莱道人的博客 4470

C++继承(带你一篇文章搞定C++的继承)

我们前面讲了模板进阶的全部内容,今天我们要进入C++里面更深层的内容了,今天我们来讲解C++的继承继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),以前我们接触的函数层次的复用,继承是类设计层次的复用。什么是复用呢?

2301_80344616的博客 5410

【c++】cpp类的继承

c++类的继承

hutaotaotao的博客 2299

【C++继承下】继承与友元 / static 菱形继承与虚继承 组合的详解分析

本文围绕C++继承展开深入探讨,涵盖多方面关键知识点。首先介绍了实现不可继承类的两种方法,C++98通过私有化构造函数,C++11则使用final关键字。接着阐述了继承与友元、静态成员的关系,友元不可继承,静态成员在继承体系中唯一。还重点剖析了多继承及菱形继承问题,指出其数据冗余和二义性缺陷,并说明可通过虚继承解决。最后对比了继承与组合,强调优先使用组合以降低耦合度。旨在帮助读者全面理解C++继承相关知识。

2402_87731470的博客 1666

C++浅谈组合和继承

C++有三大特性:封装、继承和多态。 之前提到过继承是为了实现代码的复用,如果子类继承了父类那么就会继承父类所有的数据成员及成员函数,在公有继承的时候保持is-a原则,即每个子类的对象也是父类对象。 因此引入了单继承、多继承以及菱形继承等方式。但是正是因为继承太有用、太容易用、很容易实现代码的复用性因此我们需要选择性的继承。 如果A类和B类毫无关系,我们不应该为了让B类多一个功能而去让B继承

persistence_s的博客 3770

C++之路:类的继承以及组合

类的继承是面向对象编程(OOP)的一个重要机制,它允许一个类(子类/派生类)基于另一个类(父类/基类)来构建,继承其属性和方法,同时可以扩展或修改功能。

weixin_54358182的博客 1083

C++:组合和继承的区别

理解什么是组合,一个class类里面有很多其他class类类型的成员变量理解组合和继承的区别二义性:执行了一个函数,确不一定是自己想指定的那个解决方案:用c.A::func()明确的指定调用的是class虚继承有点像条件编译,引入一次就好,不用重复引入,也能达到引入效果学习记录,侵权联系删除。来源:朱老师物联网大课堂。

qq_43441284的博客 926
上一篇: C++知识点12:深拷贝浅拷贝
下一篇: C++13:内存分配方式
有多少个小土豆
博客等级 码龄10年 235粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值