在子类中,我需要复制基类中的字段。一个简单的例子:如果我们有一个基类Car
,我想制作一辆名为DoubleCar
的汽车,它代表两辆车中的一辆(有两个引擎,八个车轮等)。这个DoubleCar
就像一辆汽车(我们可以启动它,加速,刹车等等),所以继承似乎很自然。我尝试做它通过以下方式如何从基类C++复制字段
class Engine{
public: void Start(){}
};
class Car
{
Engine* engine;
public:
Car(Engine* engine){this->engine=engine;}
virtual void Start(){engine->Start();}
};
,创造DoubleCar
拥有的第一辆车从基类和secondCar
为现场:
class DoubleCar : public Car
{
Car* secondCar;
public:
DoubleCar(Engine* e1, Engine* e2) : Car(e1)
{secondCar = new Car(e2);}
virtual void Start(){Car::Start(); secondCar->Start();}
};
该解决方案看起来丑陋,它看起来像一个汽车比另一个更重要。我也试图把两辆车都放在田里,而忽略底座成员,像这样
class DoubleCar1 : public Car
{
Car *firstCar, *secondCar;
public:
DoubleCar1(Engine* e1, Engine* e2) : Car(NULL)
{firstCar = new Car(e1); secondCar = new Car(e2);}
virtual void Start(){firstCar->Start(); secondCar->Start();}
};
这也不是一个好的解决方案。对于这样的问题,什么是一个好的设计?当然,在我真正的问题中,我很少有父母Car
和几个孩子,所以我在一棵树的中间。
'因此看起来很自然的做一个继承'看起来像你很快跳到这个结论:/特别是因为你继续使用半继承,然后假装继承! –
'DoubleCar'应该和'Car'有相同的功能,这就是为什么我会得出这个结论。 – Dejan
@petar为了您的代码使用['std :: shared_ptr's](http://en.cppreference.com/w/cpp/memory/shared_ptr)而不是自己处理原始指针 – Mgetz