如何在组合中的运行时更改成员对象?

Aqu*_*irl 3 c++ oop composition

思考C++卷.1(P-33):

组合具有很大的灵活性.新类的成员对象通常是私有的,这使得使用该类的客户端程序员无法访问它们.这允许您在不干扰现有客户端代码的情况下更改这些成员.
您还可以在运行时更改成员对象,以动态更改程序的行为.接下来描述的继承没有这种灵活性,因为编译器必须对使用继承创建的类设置编译时限制.

我们如何在组合中的运行时更改成员对象?
写入类声明时是否包含对象?

class car
{
private:
engine obj;
}

所以,这里的类car包含类的对象engine.我们怎样才能在运行时改变它?

还是我错过了一些观点?

rob*_*off 6

尝试使用指向您的成员对象的指针:

class car {
    engine *obj;
}
Run Code Online (Sandbox Code Playgroud)

现在,你可以在运行时选择是否使用实例rotary_enginev8_engineflux_capacitor_engine.

当然,您可能希望使用类似a unique_ptr或a的东西shared_ptr来管理成员对象的所有权和生命周期.