Главная->Інформатика та програмування->Содержание->Инициализация копирования и присваивания

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн

Инициализация копирования и присваивания

Компилятор C++ всегда стоит на вашей стороне, выполняя рутинную работу,

которой программиста незачем загружать. Если вы обязуетесь контролировать

ситуацию, он может посчитаться с вашим мнением и предоставить некоторые во-

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

вычайно важными примерами этого процесса являются оператор присваивания

и конструктор копирования.

Вы постоянно пользуетесь оператором присваивания, может быть, даже не

задумываясь о том, что за ним стоит с точки зрения компилятора. Пусть a1 и

а2 — некоторые объекты. Несмотря на то, что вы говорите компилятору: «при-

своить а2 значение а1», выражение

а2 = a1;

 

заставит компилятор копировать данные из a1 элемент за элементом в а2. Тако-

вы действия по умолчанию для оператора присваивания.

Вы, возможно, знакомы с инициализацией переменных. Инициализация одно-

го объекта другим, как в выражении

alpha a2(a1); //инициализировать а2 значением a1

вызывает подобные действия. Компилятор создает новый объект а2, затем эле-

мент за элементом копирует данные из a1 в а2. Это то, что по умолчанию выпол-

няет конструктор копирования.

Оба этих стандартных действия выполняются без проблем компилятором.

Если поэлементное копирование из одного объекта в другой — это то, что вам

нужно, то можно больше ничего не предпринимать в этом направлении. Тем

не менее, если вы хотите научиться заставлять присваивание или инициализа-

цию выполнять какие-либо более интеллектуальные действия, то придется разо-

браться в том, как обойти стандартную реакцию на эти операторы. Обсуждать

технику перегрузки оператора присваивания и конструктора копирования мы

будем отдельно друг от друга, затем соединим полученные знания в один при-

мер, который дает возможность классу String более эффективно использовать

память. Кроме этого, вы узнаете об объектной диаграмме UML.

 

20