iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 组合 (Composition)的介绍与实例
  • 153
分享到

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

2024-04-02 19:04:59 153人浏览 独家记忆
摘要

概述 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 组合 (Composition)的介绍与实例

本文链接: https://www.lsjlt.com/news/126071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 组合 (Composition)的介绍与实例
    概述 c++中一个重要的特点就是代码的重用,为了代码重用,有两个非常重要的手段,一个是继承,一个是组合 组合 (Composition) 指在一个类中另一类的对象作为数据成员. ...
    99+
    2024-04-02
  • CSS中组合与嵌套的用法介绍
    本篇内容主要讲解“CSS中组合与嵌套的用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS中组合与嵌套的用法介绍”吧!CSS组合与嵌套用法详解CSS组合...
    99+
    2024-04-02
  • C/C++中组合详解及其作用介绍
    目录概述案例总结概述 组合 (Composition) 指在一个类中另一类的对象作为数据成员. 案例 在平面上两点连成一条直线, 求直线的长度和直线中点的坐标. 要求: ...
    99+
    2024-04-02
  • JavaScript基础介绍与实例
    一、什么是JavaScript JavaScript是一种具有面向对象能力的、解释性的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言。因为他不需要在...
    99+
    2024-04-02
  • c++开源库rapidxml介绍与示例
    rapidxml是一个轻量级的C++库,用于解析和修改XML文档。它是一个非常快速和高效的解析器,适用于内存受限的环境或对解析性能要...
    99+
    2023-09-14
    C++
  • C#接口方法的实例介绍
    本篇内容介绍了“C#接口方法的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!公有方法实现C#接口方法尽管C#在定义接口时不用指明接口...
    99+
    2023-06-18
  • Android中Activity组件实例介绍
    目录Activity 概述启动 Activity 的两种情况关闭 Activity总结Activity 概述 在 Android 应用中,提供了 4 大基本组件,分别是 Activi...
    99+
    2024-04-02
  • C语言中qsort函数的介绍与用法实例
    目录一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组排序三.使用冒泡排序思想...
    99+
    2024-04-02
  • C++实现堆排序实例介绍
    目录概述:思路:代码:概述: 堆排序是利用构建“堆”的方法确定具有最大值的数据元素,并把该元素与最后位置上的元素交换。可将任意一个由n个数据元素构成的序列按照(a1,a2,...,...
    99+
    2024-04-02
  • redis锁机制介绍与实例
    1 悲观锁 执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观)。基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰。 Redis不支持悲观锁。Redis作为缓存服务器...
    99+
    2024-04-02
  • C++实例分析组合数的计算与排列组合的产生
    目录组合数的计算使用加法递推—O(n^2)使用乘法递推—O(n)排列和组合的产生(无重集元素)全排列一般组合全组合由上一排列产生下一排列由上一组合产生下一组合...
    99+
    2024-04-02
  • C#运算符重载的实例介绍
    本篇内容介绍了“C#运算符重载的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#运算符重载实例是掌握C#运算符重载的有效方法,那么...
    99+
    2023-06-18
  • python中sys模块的介绍与实例
    python版本: Python 2.7.6 1: sys是python自带模块. 利用 import 语句输入sys 模块。 当执行import sys后, python在 s...
    99+
    2024-04-02
  • 15个JavaScript数组方法的实例介绍
    本篇内容主要讲解“15个JavaScript数组方法的实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“15个JavaScript数组方法的实例介绍”吧!在...
    99+
    2024-04-02
  • JavaScript组合模式的简单介绍
    这篇文章主要介绍“JavaScript组合模式的简单介绍”,在日常操作中,相信很多人在JavaScript组合模式的简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • SpringCloudOpenFeign基本介绍与实现示例
    目录介绍常用注解代码实现注意事项介绍   在上面一篇介绍Nacos的文章最后,两个服务的相互调用是用的RestTemplate类完成的。但这种方式不是很推荐,更佳...
    99+
    2023-02-21
    SpringCloud OpenFeign SpringCloud OpenFeign使用
  • 介绍C语言中tolower函数的实例
    C语言tolower函数用于把大写字母转换为小写字母。 在本文中,我们先来介绍tolower函数的使用方法,然后编写一个自定义的_tolower函数,实现与tolower函数相同的功...
    99+
    2024-04-02
  • C++的类与C#的类详细介绍
    本篇内容介绍了“C++的类与C#的类详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!许多编程人员学习C++总结经验为,有的觉得C++语...
    99+
    2023-06-17
  • C#多线程死锁介绍与案例代码
    一、死锁简介 在多道程序设计环境下,多个进程可能竞争一定数量的资源,。一个进程申请资源,如果资源不可用,那么进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待的进程有可...
    99+
    2024-04-02
  • C#单例模式与多线程用法介绍
    一、单例模式 我们先来看看两种创建单例模式的示例代码。 1、饿汉式  饿汉式创建单例模式是在程序里面直接初始化了一个对象实例: class Good { /// &...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作