C++ 组合 (Composition)的介绍与实例

 更新时间:2021年05月16日 08:55:55   作者:我是小白呀  
这篇文章主要给大家介绍了关于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)的文章就介绍到这了,更多相关C++ 组合Composition内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中strtok()函数的用法介绍

    C++中strtok()函数的用法介绍

    以下是对C++中strtok()函数的使用方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • MinGW-w64 C/C++编译器下载和安装的方法步骤(入门教程)

    MinGW-w64 C/C++编译器下载和安装的方法步骤(入门教程)

    如果电脑没有安装MinGW-w64 C/C++编译器,就无法运行gcc命令,本文主要介绍了MinGW-w64 C/C++编译器下载和安装的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • c语言随机数函数示例

    c语言随机数函数示例

    这篇文章主要介绍了c语言随机数函数示例,需要的朋友可以参考下
    2014-04-04
  • 深入了解C++智能指针的使用

    深入了解C++智能指针的使用

    智能指针的本质就是使用一个对象来接管一段开辟的空间,在该对象在销毁的时候,自动调用析构函数来释放这段内存。本文就来和大家详细聊聊智能指针的使用,需要的可以参考一下
    2022-10-10
  • Matlab实现绘制高阶版本韦恩图(upset图)

    Matlab实现绘制高阶版本韦恩图(upset图)

    韦恩图随着阶数升高会越来越复杂,当阶数达到7或者以上时几乎没办法绘制,但是使用upset图却可以比较轻易的绘制。本文就来用Matlab实现绘制upset图,需要的可以参考一下
    2023-01-01
  • C语言中的常量详解

    C语言中的常量详解

    本文主要讲解C语言 常量,这里整理了 C语言常量的基础知识,并附代码示例和示例详细讲解,希望能帮助开始学习C 语言的同学
    2021-09-09
  • c++显式栈实现递归介绍

    c++显式栈实现递归介绍

    大家好,本篇文章主要讲的是c++显式栈实现递归介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • wince禁止程序标题栏上的退出按钮示例

    wince禁止程序标题栏上的退出按钮示例

    这篇文章主要介绍了wince禁止程序标题栏上的退出按钮示例,需要的朋友可以参考下
    2014-02-02
  • C++中Boost库裁剪与其应用详解

    C++中Boost库裁剪与其应用详解

    大家都知道STL全称"标准模板库(Standard Template Library)",其实它是一套标准,可能有不同的实现,它是 C++ 的"标准库"。Boost 则是一个 C++ 库,被称为"C++ 准标准库"。那么这篇文章文章我们就来详细的介绍C++Boost库的裁剪与其应用,感兴趣的朋友可以一起学习。
    2016-10-10
  • C语言数组栈实现模板

    C语言数组栈实现模板

    这篇文章主要为大家详细介绍了C语言数组栈实现模板,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论