Глава 17

h04031.jpg

Конструкторы:

копирование и присваивание

*

Эта глава посвящена конструктору копий (copy constructor) и операции присваивания (assignment operator). Эти два элемента вполне заслужили отдельную главу. Создание программ на C++ без понимания внутренней сущности этих функций-членов сродни бегу на марафонскую дистанцию без тренировки (возможно, это не самое удачное сравнение; проще говоря, эти функции очень важны).

Данная глава следует за главами о перегрузке функций и операций потому, что без перегрузки эти две функции немыслимы. Конструктор копий — это перегружаемая функция, и операция присваивания (=) также перегружаемая оператор-функция.

Конструктор копий служит для создания новых объектов из существующих. Операция присваивания нужна для того, чтобы сделать один существующий объект эквивалентным другому существующему.

Зададимся вопросом: "Что означает создать копию?" По-видимому, это означает присваивание значений элементов одного объекта элементам другого. Этот ответ, однако, далеко не полон. C++ — это язык, который практически не ограничивает выбор пути реализации программы. Способ присваивания объектов — не исключение из этого правила.

Если для копирования ваших классов достаточно просто привести один объект в то же состояние, что и другой, прекрасно. Это весьма просто, и мы увидим, как это делается. Однако если вашему приложению требуются другие методы копирования, C++ не станет создавать их за вас. В текущей главе обсуждаются все аспекты этого вопроса, по разделам:

• Понятие копирования

• Четыре наиболее важных функции-члена класса

• Буквальное копирование и развернутое копирование