详细描述 依赖、组合、聚合、关联 并用C++举例
时间: 2024-10-24 15:15:52 浏览: 25
Java依赖-关联-聚合-组合之间区别_动力节点Java学院整理
5星 · 资源好评率100%
在面向对象设计中,四种常见关系包括:
1. **依赖** (Dependency):当一个类A需要另一个类B的功能才能正常工作时,我们说A依赖于B。例如,在C++中,类A有一个指向类B的对象引用,但没有包含它。如果B改变,A不需要修改,只是在使用B功能的地方可能会受到影响。例如:
```cpp
class B {
public:
void doSomething();
};
class A {
private:
B* b;
public:
void useB() { b->doSomething(); }
};
```
2. **组合** (Composition): 类A包含一个或多个属于类B的对象实例,表示A是由B的实例构成的。例如,一个"汽车"类可以组合多个"轮胎"对象:
```cpp
class Car {
private:
std::vector<Tire> tires;
public:
void addTire(Tire tire) { tires.push_back(tire); }
};
```
如果"轮胎"改变,那么所有"汽车"实例都会受影响。
3. **聚合** (Aggregation): 类似于组合,但聚合允许部分独立存在,即没有主从关系。比如,一个"图书馆"可以聚合多个"书籍",但一本书并不一定要属于某个特定的图书馆。在C++中,可以使用指针或智能指针:
```cpp
class Book;
class Library {
private:
std::list<Book*> books;
public:
void addBook(Book* book);
};
```
4. **关联** (Association): 它是最弱的关系,简单地说就是两个类之间有某种连接,但它们不是整体包含部分或者部分组成整体。例如,学生和课程之间的关系,每个学生可以选择一门或多门课程:
```cpp
class Student;
class Course {
public:
std::vector<Student*> students;
};
class Student {
private:
Course* course; // 可能为空
public:
void enrollIn(Course& course);
};
```
阅读全文