Ничего особенно плохого в других ответах, но если бы я предполагал, что все подклассы A могут быть clone()
отредактированы только путем построения с двумя параметрами, то я бы сделал это так:
class A
{
public:
A* clone() const { return create(value1, value2); }
private:
virtual A* create(Type1 v1, Type2 v2) const { return new A(v1, v2); }
};
class C : public A
{
virtual C* create(Type1 v1, Type2 v2) const { return new C(v1, v2); }
};
Если ничего другого, это означает, что value1
и value2
не должны быть доступны в классе C - они могут быть частными членами.Если это нетривиальные выражения, их также не нужно повторять в Си.
Хотя это немного сомнительное предположение - более вероятно, что вы захотите clone()
использовать производныеконструктор копирования класса, как в ответе tdammers.