C ++ наследуется вызов конструктора копирования?

У меня есть класс B, производный от класса A. Я вызываю конструктор копирования, который я реализовал для объекта класса B. Я также реализовал конструктор для класса A.

Этот конструктор копирования вызывается автоматически, когда я вызываю конструктор копирования для класса B? Или как это сделать? Это хороший способ:

A::A(A* a)
{
B(a);
// copy stuff
}

Спасибо!

3

Решение

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

B::B(const B& b) : A(b)
{
// copy stuff
}

Я немного изменил синтаксис, потому что ваш код не показывал конструктор копирования и не соответствовал вашему описанию.

Не забывайте, что если вы реализуете конструктор копирования самостоятельно, вы должны следовать правило трех.

17

Другие решения

Конструктор копирования имеет подпись:

A(const A& other)  //preferred

или же

A(A& other)

Ваш конструктор конверсии. Кроме того, вам нужно явно вызвать конструктор копирования базового класса, в противном случае будет вызван конструктор по умолчанию:

B(const B& other) { }

эквивалентно

B(const B& other) : A() { }

т. е. ваш конструктор копирования из класса A не будет вызываться автоматически. Тебе нужно:

B(const B& other) : A(other) { }
3

По вопросам рекламы [email protected]