Я знаю, что многие примеры относятся к 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), похоже, не жалуется на это.
Это именно так, как вы должны инициализировать базовый класс в конструктор копирования ... – Rostislav
@Rostislav - Так будет 'other' в конструкторе копии преобразуется в' Base' перед передачей конструктору копии базового класса? – owacoder
Он будет выполнять обычное разрешение перегрузки. И обычно это однозначно выбирает правильный конструктор. Конечно, вы могли бы создать искусственный пример, где это не так, но тогда это просто плохой дизайн. – Rostislav