Ваш код делает именно то, что должен. Ваши ожидания неверны. Вы ожидаете box = 0,7, но вы перезаписываете поле с заявлением
circle=box;
Конструктор копирования разрушает старый прямоугольник внутри круга и создает новый как копию «прямоугольника». Какое значение имеет «коробка»?
Так как вы по умолчанию инициализируете 'box' в вашем основном
Box box;
и по умолчанию 0, программа выведет 0 в последнем выражении cout.
cout << "box=" << circle.getAreaBox() << endl;
напечатает значение поля внутри круга ... которое было инициализировано с помощью конструктора копирования из переменной 'box'.
Если вы измените переменную 'box' в main на:
int main() {
Box box(0.9);
...
Вывод будет:
circle=6, box=0.9
P.S. Пожалуйста, не используйте указатели (Box*
). Просто не надо. Используйте std::shared_ptr<>
вместо этого. Есть множество хороших сайтов, объясняющих причины. У вашего класса 'circle' много проблем, связанных с указателями. Вы можете улучшить свои навыки программирования, прочитав о
- свисающий указатель
deep copy
против shallow copy
std::shared_ptr<>
и std::unique_ptr<
>
- виртуальные детекторы
Веселитесь ...