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

从零到一:基于Esp32与LVGL的ST7789屏幕驱动全流程实战 本文详细介绍了基于Esp32与LVGL的ST7789屏幕驱动全流程实战,包括环境准备、驱动文件改造、硬件接口配置、LVGL集成与优化等关键步骤。通过VSCode+ESP-IDF开发环境,读者可以快速掌握SPI模式下的屏幕驱动开发,解决常见问题如颜色错乱、画面撕裂等,并实现LVGL的高效集成与性能优化。 阅读详情

继承特性:

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

作用:

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

继承控制访问:

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

继承类型:

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代码

夏令营纪实——东南大学计科院&PALM实验室面试全解析 本文详细解析了东南大学计科院与PALM实验室夏令营的面试全流程,包括前期准备、技术考察、项目经验深挖等关键环节。特别针对自然语言处理(NLP)和机器学习(ML)领域的高频问题提供应对策略,帮助申请者提升面试表现。文章还分享了实用的准备技巧和面试经验,为有意向参加该夏令营的学生提供宝贵参考。 阅读详情

相关推荐

SpyGlass Lint脚本实战:如何用TCL自动化RTL代码检查(附完整配置模板)

本文详细介绍了如何利用TCL脚本实现SpyGlass Lint工具的自动化RTL代码检查。通过构建模块化、工程化的脚本框架,文章提供了从环境搭建、核心配置、规则定制到豁免管理的完整实战指南,并附有可复用的配置模板,旨在帮助IC设计工程师构建高效、一致的代码质量检查流水线。

weixin_29204205的博客 134

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

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

秃了也弱了 3963

保姆级教程:在瑞芯微RV1126B上部署轻量化YOLOv8,实现端侧实时目标检测

本文详细介绍了在瑞芯微RV1126B芯片上部署轻量化YOLOv8模型的完整流程,包括开发环境搭建、模型训练优化、量化转换及嵌入式部署。通过利用RV1126B的3TOPS NPU算力和AI-ISP特性,实现端侧实时目标检测,提升边缘AI应用的性能和效率。

weixin_30329623的博客 267

继承、组合

不使用继承: 使用继承:

无问西东的博客 1351

UR机械臂正逆运动学解析:从DH参数到8组解的完整求解策略

本文深入解析UR机械臂的正逆运动学求解策略,从DH参数原理到完整的8组解求解方法。详细介绍了正运动学的坐标变换过程,以及逆运动学中Atan2函数和三角恒等变换的应用,并揭示了8组解的产生机制。通过实际案例和调试技巧,帮助工程师掌握UR机械臂运动学求解的核心技术。

weixin_29094775的博客 414

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

继承与组合(Java详解)

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

m0_61359105的博客 2094

SOME/IP协议详解「总目录」

SOME/IP系列文章总目录

雪云飞星的博客 2万+

Java——继承和组合

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

2301_81375781的博客 1743

非技术面试题精选大全

回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业喜欢有礼貌的求职者。

吃面爱放香菜的博客 435

MATLAB - 浮动基座机器人的逆运动学

本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转,具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用,即使用安装在浮动和致动基座上的机械臂在空间操纵物体,也适用于躯干和腿部可在空间自由移动的行走机器人。请注意,刚体树对象表示具有固定基体的刚体树。这意味着刚体树的基体在世界中具有固定的位置和方向。您可以在基体上附加一个 “浮动 ”类型的刚体关节,为具有浮动基体的机器人建模,以用于动态模拟等某些应用。

机器人控制与仿真应用 2440

组合与继承

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

邵光亮的博客 2420

SAP ABAP 实用小技巧合集 (一)

本合集包含了笔者从事 ABAP 开发 17 年以来积累的小技巧。持续更新。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3224

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

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

weixin_56167571的博客 1903

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 继承与组合的区别

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

Doublelv 的博客专栏。 7140

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++ 继承 和 组合

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

be_a_big_cattle的博客 1471

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

第五章: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、付费专栏及课程。

余额充值