C++ 组合 (Composition)
C++ 组合
- 概述
- 案例
- 总结
概述
组合 (Composition) 指在一个类中另一类的对象作为数据成员.
案例
在平面上两点连成一条直线, 求直线的长度和直线中点的坐标.
要求:
- 基类: Dot
- 派生类: Line (同时组合)
- 派生类 Line 从基类 Dot 继承的 Dot 数据, 存放直线的中点坐标
- Line 类再增加两个 Dot 对象, 分别存放两个端点的坐标
Dot 类:
#ifndef PROJECT5_DOT_H
#define PROJECT5_DOT_H#include <iostream>
using namespace std;class Dot {
public:double x, y;Dot(double a, double b) : x(a), y(b) {};void show() {cout << "x: " << x << endl;cout << "y: " << y << endl;};
};#endif //PROJECT5_DOT_H
Line 类:
#ifndef PROJECT5_LINE_H
#define PROJECT5_LINE_H#include "Dot.h"class Line : public Dot {
private:Dot d1;Dot d2;
public:Line(const Dot &d1, const Dot &d2) : Dot(0, 0), d1(d1), d2(d2) {x = (d1.x + d2.x) / 2;y = (d1.y + d2.y) / 2;}void show(){Dot::show();cout << "dot1: (" << d1.x << ", " << d1.y << ")" << endl;cout << "dot2: (" << d2.x << ", " << d2.y << ")" << endl;}
};#endif //PROJECT5_LINE_H
main:
#include <iostream>
#include "Dot.h"
#include "Line.h"
using namespace std;int main() {double a, b;cout << "Input Dot1: \n";cin >> a >> b;Dot dot1(a,b);cout << "Input Dot2: \n";cin >> a >> b ;Dot dot2(a,b);Line l1(dot1, dot2);l1.show();return 0;
}
输出结果:
Input Dot1:
1 2
Input Dot2:
4, 6
x: 2.5
y: 1
dot1: (1, 2)
dot2: (4, 0)
总结
- 类的组合和继承都是重用的重要方式, 可以有效地利用已有类的资源
- 继承是纵向的, 组合是横向的. 通过继承, 我们从基类得到了数据成员. 通过组合, 从别的类得到了成员, 有效地组织和利用现有的类, 减少工作量
- 如果类 A 和类 B 毫不相关, 不可以为了使 B 的功能更多些而让 B 继承 A 的功能
- 如果类 B 有必要使用类 A 的功能. 当 B 是 A 的一种的时候我们使用继承, 当 B 是 A 的一部分时, 我们使用组合
C++ 组合 (Composition)相关推荐
- UML中聚集(Aggregation)与组合(Composition)的区别
UML中,聚集和组成是两个十分相似的概念.书上这样说:聚集是关联中的一种,聚集对象由部分对象组成:组合又是一种特殊的聚集.在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在. 即是说 ...
- UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...
- 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合
文章目录 1.面向对象程序设计概述 1.1 面向对象程序设计 1.2 传统结构化程序设计 1.3 面向对象与面向过程举例 2.类之间的关系 2.1 泛化/继承 2.2 实现 2.3 依赖 2.4 关联 ...
- java uml聚合代码_UML类图(下):关联、聚合、组合、依赖
前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
在学习面向对象设计对象关系时,依赖.关联.聚合和组合这四种关系之间区别比较容易混淆.特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境.特定情景等.他们在编程语言中的体现却是基本相同的,但 ...
- c++面向对象高级编程 学习五 组合、委托与继承
组合 composition 表示has a queue类中有一个deque容器,这种关系叫做 组合 queue中的六个函数都是调用c的函数完成的 template <class T> c ...
- java对象组合_java并发编程(三): 对象的组合
对象的组合: 如何将现有的线程安全组件,组合成我们想要的更大规模的程序. 设计线程安全的类: 设计线程安全类的三个要素: 1.找出构成对象状态的所有变量: 2.找出约束状态变量的不变性条件: 3.建立 ...
- composition java_阿里P7架构师通过源码浅析Java中的资源加载
一. 前提 最近在做一个基础组件项目刚好需要用到JDK中的资源加载,这里说到的资源包括类文件和其他静态资源,刚好需要重新补充一下类加载器和资源加载的相关知识,整理成一篇文章. 二. 什么是类加载器 虚 ...
- 组合,聚合,关联,依赖的区别
依赖(Dependency) 在C++中体现为局部变量.方法/函数的参数或者是对静态方法的调用 图示为: 关联(Association) 体现在C++中,关联关系是通过成员变量来实现的 图示为: 聚合 ...
- UML类图几种关系的总结,泛化 = 实现 组合 聚合 关联 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
最新文章
- 新的sublime text已经上传网盘,地址写在下面
- 2020秋季人工神经网络作业登记与批改
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
- knn人脸识别判断_测试使用K-最近邻(kNN)算法的30个问题
- 手动脱UPX壳的几种方法
- JavaWeb --第四章Maven详解
- python 生成字符串_Python字符串生成器,按照特定的顺序
- Mybatis-Pagehelper
- canny边缘检测算法_OpenCV4中调用HED边缘检测算法
- ORA-04031:unable to allocate 4120 bytes of shared memory ‘obj stat mem’故障解决
- iTextSharp 添加表格
- audacity音轨加伴奏_如何在Audacity中使用Crossfade进行音轨之间的无缝过渡
- 开放api接口平台:appid、appkey、appsecret
- 【Java编程系列】java用POI、Itext生成并下载PPT、PDF文件
- 解决PHP项目显示“该网页无法正常运作”,但没有显示报错内容
- 雷锋网巴展见闻录:5G 手机也许会迟到,但不会缺席 | MWC 2019
- Mac OS 任意显示器 开启HiDPI方法
- max2 android9.0,乐视max2 安卓9.0刷机包
- 拼多多,京东,1688一键铺货到淘宝
- 【Oracle】TYPE定义的数据类型