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

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

案例

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

  • 基类: 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/873326/

相关文章:

  • OpenClaw从入门到应用——自动化:对比Cron 与 Heartbeat
  • 14001开源:黄大年茶思屋 难题揭榜 第140期全加密流量高精度识别与轻量化推理技术 标准化解题写作框架
  • 别再只用运放了!用HCNR201A光耦给你的Arduino/STM32项目加个高速模拟隔离“盾牌”
  • 别再乱点按钮了!LabVIEW布尔控件6种机械动作的保姆级图解(附官方范例查找方法)
  • C++类的构造与析构特点及作用详解
  • 创业公司如何用 Taotoken 控制 AI 应用开发与测试成本
  • AutoUnipus:三步实现U校园自动化答题,100%正确率解放学习时间!
  • 企业财税合规实战:3步帮你重构账务数据,化解现金流风险
  • 告别静默推送!用UniApp+UniPush2.0打造高点击率消息通知(附完整项目配置)
  • 无需编程的13种语言文本挖掘工具:KH Coder完整指南带你5分钟上手
  • 成年人最大的牢笼:活在别人的操作系统里
  • 如何在苹果电脑上免费运行Windows应用:Whisky的完整指南
  • 书匠策AI拆解|毕业论文全流程“开挂指南“,2025届毕业生必看的写论文黑科技!
  • QGIS插件QuickOSM实战:5分钟搞定城市级路网、水系与POI数据,为你的地图项目快速打底
  • MyOS之Makefile入门
  • 14002开源:黄大年茶思屋 难题揭榜 第140期 非均匀雷达阵列的高精度高效率计算和排布算法 标准化解题写作框架黄大年茶思屋 难题揭榜 第140期
  • 银行业务学习:深入理解直贴(贴现)、转贴现、再贴现
  • 华硕笔记本性能控制终极指南:用G-Helper告别臃肿,重获系统掌控权
  • G-Helper终极指南:华硕笔记本显示优化与色彩管理深度解析
  • Python抖音机器人实战指南:3步实现智能颜值检测与自动化运营
  • 14003开源:黄大年茶思屋 难题揭榜 第140期 异构大规模资源协同分配多目标优化问题 标准化解题写作框架
  • 基于SpringBoot的旅游网站的设计与实现(源码+论文)
  • WeChatExporter深度解析:永久保存微信聊天记录的完整技术方案
  • 创建MQTT连接时如何设置参数?
  • 告别handshake timeout:手把手教你配置NVM镜像源,并附上Node.js各版本国内高速下载地址大全
  • 2026 年免费投票制作平台哪个最好用 丨平台深度测评报告 - 资讯纵览
  • 避坑指南:用MounRiver Studio一键烧录沁恒CH32V208时,WCH-LinkRV连接失败怎么办?
  • 工业计算机是什么?哪个好用?
  • 14004开源:黄大年茶思屋 难题揭榜 第140期 超大规模网络数据面编码建模 标准化解题写作框架
  • 高端设计制造业SD-WAN跨域组网深度解析:头部无人机企业如何实现异地数据高效安全回传和协作