当前位置: 首页 > news >正文

C/C++中组合详解及其作用介绍

组合 (Composition) 指在一个类中另一类的对象作为数据成员.

案例

在平面上两点连成一条直线, 求直线的长度和直线中点的坐标.
要求:

  • 基类: Dot
  • 派生类: Line (同时组合)
  • 派生类 Line 从基类 Dot 继承的 Dot 数据, 存放直线的中点坐标
  • Line 类再增加两个 Dot 对象, 分别存放两个端点的坐标

Dot 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#ifndef PROJECT5_DOT_H

#define PROJECT5_DOT_H

#include <iostream>

usingnamespacestd;

classDot {

public:

doublex, y;

Dot(doublea,doubleb) : x(a), y(b) {};

voidshow() {

cout <<"x: "<< x << endl;

cout <<"y: "<< y << endl;

};

};

#endif //PROJECT5_DOT_H

Line 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#ifndef PROJECT5_LINE_H

#define PROJECT5_LINE_H

#include "Dot.h"

classLine :publicDot {

private:

Dot d1;

Dot d2;

public:

Line(constDot &d1,constDot &d2) : Dot(0, 0), d1(d1), d2(d2) {

x = (d1.x + d2.x) / 2;

y = (d1.y + d2.y) / 2;

}

voidshow(){

Dot::show();

cout <<"dot1: ("<< d1.x <<", "<< d1.y <<")"<< endl;

cout <<"dot2: ("<< d2.x <<", "<< d2.y <<")"<< endl;

}

};

#endif //PROJECT5_LINE_H

main:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include <iostream>

#include "Dot.h"

#include "Line.h"

usingnamespacestd;

intmain() {

doublea, 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();

return0;

}

输出结果:

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 的一部分时, 我们使用组合
http://www.jsqmd.com/news/723808/

相关文章:

  • 我做了一款鸿蒙加密App,加密后的密文看起来像一段正常中文——聊聊 AES-GCM + 字谱替换的实现思路
  • PHP医疗系统脱敏性能断崖式下跌真相(AES-CTR误用、盐值硬编码、熵池枯竭三大致命缺陷)
  • lvgl_v8之按键实现滚动区域滚动代码示例(亲测好用)
  • 如何5秒获取百度网盘提取码:baidupankey智能工具完整指南
  • 前端性能优化:图片优化策略详解
  • 别再只用Excel了!教你用Streamlit把销售数据变成可分享的Web应用
  • 2026 年 TikTok 电商 AI 视频工具实测手记:一个跨境卖家的选型复盘
  • 告别字体模糊:MacType让Windows文字显示如macOS般清晰锐利
  • 如何用SQL快速获取上个月的对比数据_LAG函数应用
  • 开源AI智能体评估指南:从基准测试到技术选型实战
  • 005、位置、速度、加速度与加加速度
  • ​fluent没有破解成功出现的错误提示——hit return to exit-成功破解即可解决问题​
  • RAPIDS 25.06版本GPU加速数据科学新特性解析
  • C++中指针和引用的区别
  • 通俗数学4-虚光子的数学拟合
  • c++primer类详解
  • 播客内容创作4个核心技巧,帮你稳定产出高质量吸粉内容
  • ARM MPAMSM_EL1寄存器解析与资源隔离技术
  • Prompt工程的反模式:那些让你的AI应用变差的常见错误
  • Oracle 数据库启动失败:ORA-29701、ORA-01565、ORA-17503 故障处理记录_20260429
  • 睡眠编译优化:软件测试从业者的专业效能提升指南
  • 跟着 MDN 学 HTML day_1:(全套原生Input+表单结构拆解)
  • 前端性能优化:JavaScript 性能优化详解
  • 房产看房记录口碑推荐|经筛选优质实用选择整理分享
  • baidupankey:极速一键智能获取百度网盘提取码的全自动解决方案
  • ARM PMSEVFR_EL1寄存器解析与性能监控实践
  • 【技术应用】PLA技术“点亮”蛋白互作,破解动脉粥样硬化新机制!
  • 2026年全国靠谱的网球场地租赁公司推荐,梅江南网球俱乐部上榜 - 工业品网
  • 2026最新鲁大师 6.2最终绿化版,去除无用功能和广告
  • 3步快速上手:用哔哩下载姬downkyi轻松搞定B站视频下载