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