Здравствуйте. Хочу прояснить кое-что. Имеется достаточно простая иерархия классов
| Код | class Base { public: Base(){} Base(char* arg1, int arg2){} Base(const Base &object){} virtual ~Base(){}
Base& operator=(const Base &object){}
virtual void Method1() = 0; void Method2(){};
private: int size; char* data; };
class Derived: public Base { public: Derived(): Base(){} Derived(char * arg1, int arg2, char *arg3, int arg4): Base(arg3, arg4){} Derived(const Derived& object){ ??? } ~Derived(){}
Derived& operator=(const Derived &object){}
virtual void Method1(){}
private: int size; char* data; };
|
Собственно, вопрос следующий. Как правильно реализовать конструктор копирования класса-потомка, чтобы внутренний объект класса-родителя также был корректно скопирован? Есть два варианта, которые я сам могу предложить: 1.
| Код | Derived(const Derived& object): Base((Base &) object) { /* Копирование данных в объект класса-потомка*/ }
|
2.
| Код | Derived(const Derived& object) { *((Base *)this) = *((Base *) &object); /* Копирование данных в объект класса-потомка*/ }
|
Есть ли из них верный? Если оба, какой работает "правильней" ("быстрей")? Если нет, то как правильно вести себя в такой ситуации? |