C++组合类举例
时间: 2023-08-12 11:24:27 浏览: 84
一个C++组合类的例子如下:
```cpp
class Engine {
public:
void start() {
// 启动引擎
}
};
class Car {
private:
Engine engine;
public:
void start() {
engine.start(); // 调用Engine类的start方法
// 启动汽车
}
};
```
在这个例子中,Car类包含一个Engine类的对象,称为组合。Car类的start方法内部调用了Engine类的start方法,实现了汽车启动时启动引擎的功能。
相关问题
详细描述 依赖、组合、聚合、关联 并用C++举例
在面向对象设计中,四种常见关系包括:
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);
};
```
对象组合:如果一个类包含了另一个类的对象,那么它可以通过该对象访问另一个类的公有成员。举例说明C++
假设我们有两个类,一个是Person类,另一个是Address类。Person类中需要包含Address类的对象以表示一个人的住址信息。我们可以通过以下代码来实现对象组合:
```c++
class Address {
private:
string street;
string city;
string state;
string zip;
public:
// 构造函数和其他成员函数
};
class Person {
private:
string name;
int age;
Address address; // Address类的对象
public:
// 构造函数和其他成员函数
void printAddress() {
cout << "Address: " << address.street << ", " << address.city << ", " << address.state << " " << address.zip << endl;
}
};
```
在Person类中声明一个Address类的对象,我们就可以在Person类的成员函数中通过该对象访问Address类的公有成员,比如printAddress()函数就可以打印出Person类中包含的Address类的信息。这就是对象组合的一个简单的例子。
阅读全文