Выполнение глубокой копии на производных классах - PullRequest
1 голос
/ 04 февраля 2012

Это беспокоило меня в последнее время. Скажем, у меня есть базовый класс Base. Если у меня есть несколько производных классов поверх Base, таких как DerivedA и DerivedB, глубокая копия становится проблемой.

OtherClass(const OtherClass & _rhs)
{
    //I have a list of Base *, now I must assign a class id to each derived class to properly create a new one.
    //...
}

Есть ли способ обойти это?

1 Ответ

9 голосов
/ 04 февраля 2012

Вы должны определить метод клонирования в вашем Базовом классе:

virtual Base * clone() const = 0;

Каждый производный класс реализует этот метод клона:

virtual DerivedA * clone() const {
    return new DerivedA(*this);
}

Тогда ваш OtherClass просто должен выполнить итерацию и вызвать метод клонирования для каждого экземпляра Base* в вашем списке.

...