C/C++中组合详解及其作用介绍
目录
- 概述
- 案例
- 总结
概述 组合 (Composition) 指在一个类中另一类的对象作为数据成员.
文章图片
案例 在平面上两点连成一条直线, 求直线的长度和直线中点的坐标.
要求:
- 基类: Dot
- 派生类: Line (同时组合)
- 派生类 Line 从基类 Dot 继承的 Dot 数据, 存放直线的中点坐标
- Line 类再增加两个 Dot 对象, 分别存放两个端点的坐标
#ifndef PROJECT5_DOT_H#define PROJECT5_DOT_H#includeusing 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#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; }
【C/C++中组合详解及其作用介绍】输出结果:
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 的一部分时, 我们使用组合
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理