千家信息网

C语言和C++中类的组合概念以及实例用法

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章主要介绍"C语言和C++中类的组合概念以及实例用法",在日常操作中,相信很多人在C语言和C++中类的组合概念以及实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2024年11月27日C语言和C++中类的组合概念以及实例用法

这篇文章主要介绍"C语言和C++中类的组合概念以及实例用法",在日常操作中,相信很多人在C语言和C++中类的组合概念以及实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言和C++中类的组合概念以及实例用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 概述

  • 案例

  • 总结

概述

组合 (Composition) 指在一个类中另一类的对象作为数据成员.

案例

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

  • 基类: Dot

  • 派生类: Line (同时组合)

  • 派生类 Line 从基类 Dot 继承的 Dot 数据, 存放直线的中点坐标

  • Line 类再增加两个 Dot 对象, 分别存放两个端点的坐标

Dot 类:

#ifndef PROJECT5_DOT_H#define PROJECT5_DOT_H#include 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 #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语言和C++中类的组合概念以及实例用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0