类之间的关系

embedded/2024/11/10 14:13:01/

文章目录

  • 一、横向关系
    • 复合(组合)
    • 委托(聚合)
    • 依赖
    • 关联
  • 二、纵向关系(继承)
    • 继承下构造析构执行的顺序
    • 继承方法
    • 继承中的作用域
    • 多重继承
  • 总结


一、横向关系

复合(组合)

在这里插入图片描述

  1. 包含与被包含
  2. 黑色菱形框代表着拥有
  3. 黑色菱形端就是容器,它拥有了另外一个东西
  4. 这种设计模式就是Adapter,改造
  5. 通常在组合类中包含被组合类对象来实现组合关系
  6. 往往具有相同的生命周期

委托(聚合)

在这里插入图片描述
7. 两个类是指针相连的,生命不同步
8. 左边只是对外接口,实现在右边做。当左边需要动作都要用到右边的类的函数来服务
9. 左边将来也可以指向不同的实现类,右边变动不影响左边,也就不影响客户端。(又称编译防火墙)
10. 通常在聚合类中定义被聚合对象指针的数组、链表等容器。

依赖

在这里插入图片描述

  1. 是一种"uses a"的关系。
  2. 一个对象的某种行为依赖于另一个类对象,被依赖的对象视为完成某个功能的工具,并不持有对他的引用,只有在完成某个功能的时候才会用到,而且是必不可少的。
  3. 通常将被依赖的对象作为另一类方法的参数的形式实现两个类之间的依赖关系

关联

在这里插入图片描述

  1. 是一种"has a"的关系。关联不是从属关系,而是平等关系,可以拥有对方,但不可占有对方。
  2. 完成某个功能与被关联的对象有关,但是可有可无。
  3. 被关联的对象与关联的对象无生命周期约束关系,被关联对象的生命周期由谁创建就由谁来维护。
  4. 只要二者同意,可以随时解除关系或是进行关联,被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
  5. 通常在关联的类中定义被关联类对象的指针形式实现两个类之间的关联关系。

注意:依赖关系和关联关系没有生命周期,复合关系和聚合关系是有生命周期的。

二、纵向关系(继承)

让某个对象获得另一个对象的属性和方法就是继承。

被继承的类叫做基类(父类),继承的类叫派生类(子类),在派生类类名后面加:继承方式 基类。

通过继承关系,子类可以使用父类的成员。如果子类和父类有同名的成员,默认使用子类的成员,如果想要使用父类的成员,需要在成员名前加上类名::用于显式的指定区分。

继承下构造析构执行的顺序

当派生类对象被创建时,首先会调用基类的构造函数,然后调用派生类自己的构造函数。

构造函数的调用顺序是按照继承的顺序,从基类依次往下调用。即先调用最上层的基类,再依次往下调用。

析构函数的调用顺序与构造函数的调用顺序相反,先调用派生类自己的析构函数,再依次回溯调用基类的析构函数,直至最上层的基类的析构函数被调用。

继承方法

实现继承

	使用基类的属性和方法而无需额外编码能力

接口继承

	仅使用属性和方法名称,子类必须提供实现能力

可视继承

	子窗体(类)使用基窗体(类)的外观和实现代码的能力

继承中的作用域

① 在继承体系中基类和派生类都有独立的作用域。
② 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。(在子类成员函数中,可以使用 基类::基类成员 显示访问)
③  需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。
④ 注意在实际中在继承体系里面最好不要定义同名的成员。

多重继承

一个派生类有多个基类就叫做多重继承
可通过虚继承解决菱形继承问题(多次继承)

注意:防止继承可使用final关键字


总结

这就是我大概的理解,关于类之间的关系中横向关系跟23种设计模式有很大的联系,而纵向关系更是C++面向对象的三大特征之一。


http://www.ppmy.cn/embedded/11818.html

相关文章

智慧安防视频监控EasyCVR视频汇聚平台无法自动播放视频的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流…

MySQL学习笔记4——时间函数

MySQL时间函数 一、日期时间类型1、获取日期时间数据中部分信息的函数2、计算日期时间的函数3、其他日期时间函数 一、日期时间类型 时间函数就是用来处理时间的函数。时间,几乎可以说是各类项目中都会存在的数据,项目需求不同,我们需要的时…

微服务中Dubbo通俗易懂讲解及代码实现

当你在微服务架构中需要不同服务之间进行远程通信时,Dubbo是一个优秀的选择。Dubbo是一个高性能的Java RPC框架,它提供了服务注册、发现、调用、负载均衡等功能,使得微服务之间的通信变得简单而高效。 让我们来看一下Dubbo的通俗易懂的解释和…

50.基于SpringBoot + Vue实现的前后端分离-酒店管理系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的酒店管理系统设计与实现管理工作系统…

Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project

Android studio顶部app红叉- Moudle ‘XX.app’ dosen’t exist in project 1、现象: 运行老项目或者有时候替换项目中的部分代码,明明没有错但是Android studio就编译报错了。 1.1 Android studio顶部app红叉。 1.2 点击Build没有clear菜单&#xff0…

Nacos原理简单介绍

注册中心原理 官网:Nacos 注册中心的设计原理 | Nacos nacos注册中心采用了 :pull (客户端的轮询)和push (服务端主动push)策略 客户端启动时会将当前服务的信息包含ip、端口号、服务名、集群名等信息封装…

信奥赛课件 - 第一章 - 第2节 - 计算机系统的基础结构 - 习题

计算机基础知识习题 单选题 题目1 【NOIP2008】微型计算机中,控制器的基本功能是( )。 A. 控制机器各个部件协调工作 B. 实现算术运算和逻辑运算 C. 获取外部信息 D. 存放程序和数据 解析 选项 A. 控制机器各个部件协调工作 是正确的。 A 正确。控制器的主要功…

盲盒商城小程序(有米就出)

一款前端采用uniapp,后端采用Django框架开发的小程序,包含后台管理,如有人需要可联系演示功能(个人开发,可商用/学习)。 部分截图如下: