「C/C++」C++类与类的关系(UML类图+代码说明)

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「UG/NX」BlockUI集合
📚全部专栏
「UG/NX」NX二次开发「UG/NX」BlockUI集合
「VS」Visual Studio「QT」QT5程序设计
「C/C++」C/C++程序设计「Win」Windows程序设计
「算法」数据结构与算法「File」数据文件格式

相关术语

在这里插入图片描述

🎯依赖关系(Dependency):表示一个类的实现需要另一个类的协助,虚线+箭头,箭头指向被依赖的类。
🎯关联关系(Association):表示两个类之间具有某种联系,实线+实心箭头,箭头指向被关联的类。
🎯聚合关系(Aggregation):表示整体与部分之间的关系,空心菱形+实线,箭头指向整体。
🎯组合关系(Composition):表示整体与部分之间的强关系,实心菱形+实线,箭头指向整体。
🎯泛化关系(Generalization):表示一般与特殊之间的关系,实线+空心三角箭头,箭头指向父类。
🎯实现关系(Implementation):表示接口与实现类之间的关系,虚线+空心三角箭头的虚线,箭头指向接口。

在这里插入图片描述

类的结构

类元素主要由类名、属性和方法三部分构成,如下所示:

-   表示private
+   表示public
#   表示protected

其中,属性表示为:

属性名:类型
方法表示为:
方法名(参数类型):返回值类型 

依赖关系(Dependency)

在C++中,一个类可以依赖于另一个类,这意味着它使用了另一个类的成员函数或数据成员。在这种情况下,被依赖的类通常被称为“依赖类”,而依赖于它的类则被称为“客户类”。

UML类图
在这里插入图片描述

代码示例

class Point {
public:
    Point(int x, int y);
    int getX() const;
    int getY() const;
private:
    int m_x;
    int m_y;
};

class Line {
public:
    Line(Point start, Point end) : m_start(start), m_end(end) {}//构造函数初始化
    Point getStart() const {
   		return m_start;
	}
    Point getEnd() const {
   		return m_end;
	}
private:
    Point m_start;
    Point m_end;
};

关联关系(Association)

关联关系是一种表示类与类之间关系的方式,它表示两个类之间有相互关联的关系。在C++中,关联关系通常通过成员变量来实现。

UML类图
在这里插入图片描述

代码示例

在这个例子中,Class类包含一个成员变量students,它是一个存储Student对象指针的vector容器。
通过addStudent()方法,我们可以向班级中添加学生,而通过getStudents()方法,我们可以获取班级中的所有学生。

//例如,我们定义一个类Student和一个类Class,它们之间有一个关联关系,即一个班级包含多个学生:
class Student {
private:
    string m_name;
public:
    Student(string name) : m_name(name) {}
    string getName() {
        return m_name;
    }
};

class Class {
private:
    vector<Student> m_students;
public:
    void addStudent(Student& student) {
        m_students.push_back(student);
    }
    vector<Student> getStudents() {
        return m_students;
    }
};

聚合关系(Aggregation)

聚合关系是一种表示类与类之间关系的方式,它表示整体和部分之间的关系。在C++中,聚合关系通常通过成员变量来实现。(部分可以离开整体,可以独立存在)

UML类图
在这里插入图片描述

代码示例

//定义一个类Car和一个类Engine,它们之间有一个聚合关系,即汽车包含一个引擎:
class Engine {
public:
    void start() {
        cout << "Engine is starting" << endl;
    }
};

class Car {
private:
    Engine* engine;
public:
    Car(Engine* engine) : engine(engine) {}
    void start() {
        engine->start();
        cout << "Car is starting" << endl;
    }
};
//在这个例子中,Car类包含一个成员变量engine,它是一个指向Engine对象的指针。
//通过Car类的start()方法,我们可以启动汽车,其中会调用Engine类的start()方法来启动引擎。

组合关系(Composition)

组合关系是一种表示类与类之间关系的方式,它和聚合关系类似,但更加强调整体和部分之间的依赖关系。在C++中,组合关系通常通过成员变量来实现。(部分不能单独存在)

UML类图
在这里插入图片描述

代码示例

House类包含一个成员变量rooms,它是一个Room对象的数组。通过House类的openWindow()方法,我们可以打开房间中的窗户。

//定义一个Room类
class Room {
public:
    void openWindow() {
        cout << "Window is opened" << endl;
    }
};
//我们定义一个类House,类内包含三个Room属性
class House {
private:
    Room rooms[3];
public:
    void openWindow(int i) {
        rooms[i].openWindow();
    }
};
//它们之间有一个组合关系,即一个房屋由多个房间组成:

泛化关系(Generalization)

泛化关系是一种继承关系,表示一个类是另一个类的一般化描述。在C++中,使用关键字"public"来表示泛化关系。例如,我们有一个基类Animal,它有两个子类Dog和Cat。我们可以将Dog和Cat类声明为公共继承Animal类,如下所示:

UML类图
在这里插入图片描述

代码示例

class Animal {
public:
    void eat();
    void sleep();
};

class Dog : public Animal {
public:
    void bark();
};

class Cat : public Animal {
public:
    void meow();
};

实现关系(Realization)

实现关系是一种表示类与类之间关系的方式,它表示一个类实现了一个或多个接口。接口定义了一组规范,实现类必须按照这些规范来实现自己的方法。

UML类图
在这里插入图片描述

代码示例

//定义一个类Runnable,并定义了一个方法run():
class Runnable {
public:
    virtual void run() = 0;//纯虚函数
};//然后定义一个类Person,它实现了Runnable里面的run()接口:
class Person : public Runnable {
public:
    void run() {
        cout << "Person is running" << endl;
    }
};
//在这个例子中,Person类实现了Runnable接口,并实现了其中的方法run()。
//这样,我们就可以通过Person类来实现对Runnable接口的使用。

在这里插入图片描述

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何曾参静谧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值