Aqu*_*irl 3 c++ oop composition
从思考C++卷.1(P-33):
组合具有很大的灵活性.新类的成员对象通常是私有的,这使得使用该类的客户端程序员无法访问它们.这允许您在不干扰现有客户端代码的情况下更改这些成员.
您还可以在运行时更改成员对象,以动态更改程序的行为.接下来描述的继承没有这种灵活性,因为编译器必须对使用继承创建的类设置编译时限制.
我们如何在组合中的运行时更改成员对象?
写入类声明时是否包含对象?
class car
{
private:
engine obj;
}
所以,这里的类car包含类的对象engine.我们怎样才能在运行时改变它?
还是我错过了一些观点?
尝试使用指向您的成员对象的指针:
class car {
engine *obj;
}
Run Code Online (Sandbox Code Playgroud)
现在,你可以在运行时选择是否使用实例rotary_engine或v8_engine或flux_capacitor_engine.
当然,您可能希望使用类似a unique_ptr或a的东西shared_ptr来管理成员对象的所有权和生命周期.