05.09.2016 Views

Стефан Р. - С++ Для чайников

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Глава 25<br />

Перегрузка оператора присвоения<br />

Б э*ной главе...<br />

S Опасная работа, коварная работа, кошмарная работа...<br />

S Знакомство с перегрузкой оператора присвоения<br />

•/ Зашита членов<br />

главе 24, "Перегрузка операторов", в общих чертах рассматриваются вопросы<br />

перегрузки операторов для определенных вами классов. Независимо от того,<br />

будете ли вы перегружать все операторы или нет, с перегрузкой оператора присвоения<br />

стоит познакомиться как можно раньше.<br />

Вообще говоря, перегрузка операторов в C++ довольно опасное занятие. Однако,<br />

если вы будете следовать приведенному в этой главе шаблону, то с перегрузкой оператора<br />

присвоения cperator= () никаких проблем не возникает.<br />

Опасная fiaxfotfia, коварная<br />

кошма/гноя ftaJotfia...<br />

В языке С определен только один оператор, который может быть применен к структурированным<br />

типам: оператор присвоения. Приведенный ниже пример был бы корректен<br />

в С, и его результатом была бы побитовая копия структуры source в destination:<br />

void fn()<br />

{<br />

struct mistrust source, destination;<br />

destination = source;<br />

}<br />

<strong>Для</strong> обеспечения совместимости с С язык C++ определяет оператор присвоения<br />

operator={) по умолчанию для всех пользовательских классов. Этот оператор по<br />

умолчанию выполняет почленное копирование для каждого члена класса. И, конечно<br />

же, этот оператор может быть перегружен с помощью функции operator- () в любом<br />

пользовательском классе.<br />

Оператор присвоения очень похож на конструктор копирования, с которым вы<br />

встречались в главе 19, "Копирующий конструктор". При использовании оператор<br />

присвоения и конструктор копирования выглядят почти идентично:<br />

void fn(MyClass& me)<br />

{<br />

MyClass newMC = me; // Конструктор копирования<br />

newKC = me;<br />

// Оператор приезоения<br />

}<br />

<strong>Р</strong>азличие заключается в том, что, когда вызывается копирующий конструктор для<br />

newMC, самого объекта newMC еше не существует. А когда вызывается оператор присвоения.<br />

newMC уже является полноценным объектом класса MyClass.<br />

Глава 25. Перегрузка оператора присвоения 279

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!