这个问题在我的考试复习中,我想知道我是否在正确的轨道上,它来自 C++ primer 教科书。
UML 模型关系如何用 C++ 编码?
公共(public)继承允许您对 IS-A 关系进行建模,派生类能够重用基类的代码。另一种方法是使用包含,这是一个对象拥有或拥有另一个对象的对象之间的关系。这模拟了 HAS-A 关系。
例如:
- 汽车有或拥有电机
- 汽车造好后,它的马达也造好
当 Car 被摧毁时,它的马达也被摧毁。
class Car { private: Motor *motor; public: Car() { motor = new Motor(); } ~Car() { delete motor; } };
最佳答案
使用 C++ 比使用 Java 更容易建立组合关系。在最简单的情况下,包含的对象只是一个值成员:
class Car {
private:
Motor motor;
// No explicit construction/destruction required
};
当您想包含一个动态类型由调用者使用依赖注入(inject)确定的AbstractMotor
时,情况会变得更加复杂。要在这种情况下对组合进行建模,您可以使用 unique_ptr
:
class Car {
public:
explicit Car(std::unique_ptr<AbstractMotor> motor): motor(std::move(motor)) { }
private:
std::unique_ptr<AbstractMotor> motor; // Still no explicit destruction required
};
unique_ptr
确保您的Car
是Motor
的唯一所有者,并且Motor
的生命周期绑定(bind)到 Car
对象。
当一个对象拥有另一个对象时,尽量避免使用原始指针。使用 unique_ptr
,根本不需要实现重要的析构函数或使用 delete
运算符。
关于c++ - UML 模型关系是如何用 C++ 编码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101295/