У меня есть класс B, производный от класса A. Я вызываю конструктор копирования, который я реализовал для объекта класса B. Я также реализовал конструктор для класса A.
Этот конструктор копирования вызывается автоматически, когда я вызываю конструктор копирования для класса B? Или как это сделать? Это хороший способ:
A::A(A* a)
{
B(a);
// copy stuff
}
Спасибо!
Вы можете сделать это с помощью списка инициализации конструктора, который будет выглядеть следующим образом:
B::B(const B& b) : A(b)
{
// copy stuff
}
Я немного изменил синтаксис, потому что ваш код не показывал конструктор копирования и не соответствовал вашему описанию.
Не забывайте, что если вы реализуете конструктор копирования самостоятельно, вы должны следовать правило трех.
Конструктор копирования имеет подпись:
A(const A& other) //preferred
или же
A(A& other)
Ваш конструктор конверсии. Кроме того, вам нужно явно вызвать конструктор копирования базового класса, в противном случае будет вызван конструктор по умолчанию:
B(const B& other) { }
эквивалентно
B(const B& other) : A() { }
т. е. ваш конструктор копирования из класса A не будет вызываться автоматически. Тебе нужно:
B(const B& other) : A(other) { }