news 2026/5/23 21:34:56

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 的一部分时, 我们使用组合
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 21:34:13

用C++手搓一个简易RTSP服务器(支持H264推流与VLC播放)

用C从零构建RTSP服务器&#xff1a;H264推流与VLC播放实战指南 在音视频开发领域&#xff0c;实时流媒体传输协议&#xff08;RTSP&#xff09;扮演着核心角色。本文将带您用C实现一个支持H264视频推流的简易RTSP服务器&#xff0c;并通过VLC播放器验证其功能。不同于理论讲解&…

作者头像 李华
网站建设 2026/5/23 21:34:01

【 linux 】理解进程状态

目录 1.僵尸进程与孤儿进程 1.1 孤儿进程 1.2 僵尸进程&#xff08;Z&#xff09; 2.进程状态 3.进程退出与进程等待 3.1 进程退出 3.2 进程等待 3.2.1 wait和waitpid对比 3.3 WEXITSTATUS 和 WIFEXITED 1.僵尸进程与孤儿进程 1.1 孤儿进程 父进程结束了子进程还没有…

作者头像 李华
网站建设 2026/5/23 21:29:28

使用PythonOpenAI兼容SDK分钟级接入Taotoken全模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Python OpenAI兼容SDK分钟级接入Taotoken全模型 对于习惯使用OpenAI官方Python SDK的开发者来说&#xff0c;接入Taotoken平台…

作者头像 李华
网站建设 2026/5/23 21:27:17

QML 性能优化的“黑魔法”:为什么你一定要了解 `layer.enabled`?

QML 性能优化的“黑魔法”&#xff1a;为什么你一定要了解 layer.enabled&#xff1f; 在 Qt/QML 开发中&#xff0c;我们追求极致的交互体验。但你是否遇到过这种情况&#xff1a;仅仅是给一个复杂的页面加了一个简单的透明度淡入动画&#xff0c;整个界面就开始疯狂掉帧&…

作者头像 李华
网站建设 2026/5/23 21:26:30

为什么视频代剪辑的质量会影响内容传播效果

为什么你精心拍摄的视频&#xff0c;观众却划走了&#xff1f; 你是否也遇到过这样的情况&#xff1a;花了一整天拍摄Vlog&#xff0c;素材画面清晰、光线充足&#xff0c;可剪出来发到平台后&#xff0c;播放量寥寥无几&#xff1f;或者婚礼当天感动全场的瞬间&#xff0c;回看…

作者头像 李华