2015-10-10 5 views
0

Я знаю, что многие примеры относятся к stackoverflow относительно конструкторов копирования. Тем не менее, я не видел одного с моей конкретной проблемой.Копировальный конструктор базового класса

Предположим, у меня есть базовый класс Base, который определяется следующим образом:

class Base 
{ 
public: 
    Base(const Base &other); 
    ... 
} 

и что у меня есть производный класс Derived, который определяется следующим образом:

class Derived 
{ 
public: 
    Derived(const Base &other); //construct from base class 
    Derived(const Derived &other); //construct from derived class (copy constructor) 
} 

Может быть конструктор копирования определяется следующим образом?

Derived::Derived(const Derived &other) : Base(other) {...} 

Или это не хороший стиль в C++? Если нет, как я могу получить тот же результат, используя лучший метод? Мой компилятор (MSVC), похоже, не жалуется на это.

+1

Это именно так, как вы должны инициализировать базовый класс в конструктор копирования ... – Rostislav

+0

@Rostislav - Так будет 'other' в конструкторе копии преобразуется в' Base' перед передачей конструктору копии базового класса? – owacoder

+0

Он будет выполнять обычное разрешение перегрузки. И обычно это однозначно выбирает правильный конструктор. Конечно, вы могли бы создать искусственный пример, где это не так, но тогда это просто плохой дизайн. – Rostislav

ответ

1

реализовать

Derived::Derived(const Derived &other) : Base(other) {...} 

вы должны создать базовый конструктор:

Base(const Base &other); 
+1

Я знаю. Вот почему я поместил конструктор базовой копии в свой пример. – owacoder

Смежные вопросы