Ініціалізація копіювання і присвоювання
Компілятор С++ завжди підтримує програміста, виконуючи рутинну роботу. Якщо ж програміст зобов’язується контролювати ситуацію самостійно, він рахуватиметься з вашою думкою і може надати можливість деякі питання вирішувати самостійно, але за замовчуванням компілятор все робить сам. Двома надзвичайно важливими прикладами цього процесу є оператор присвоювання і конструктор копіювання.
Ми постійно використовуємо оператор присвоювання, можливо, навіть не задумуючись про те, що за ними стоїть з точки зору компілятора. Нехай а1 і а2 – деякі об’єкти. Попри те, що ми наказуємо компілятору «присвоїти а2 значення а1», вираз
а2=а1
змусить компілятор копіювати дані з а1 елемент за елементом в а2. Так за замовчуванням діє оператор присвоювання.
Ми знайомі з ініціалізацією змінних. Ініціалізація одного об’єкту іншим, як у виразі
alpha a2(a1);
викликає подібні дії. Компілятор створює новий об’єкт а2, потім елемент за елементом копіює дані з а1 в а2. Це саме те, що за замовчуванням виконує конструктор копіювання.
Обидві такі стандартні дії без проблем виконуються компілятором. Якщо поелементне копіювання з одного об’єкту в інший – це саме те, що нам потрібно, то можна більше нічого самостійно не допрограмовувати. Тим не менше, якщо ми хочемо навчитися змусити копіювання чи ініціалізацію виконувати більш інтелектуальні дії, то доведеться розібратися з тим, як обійти стандартну реакцію на ці оператори.
Дата добавления: 2015-08-26; просмотров: 603;