Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Часть V. Полезные особенности. Перегрузка оператора присвоения. Перегрузка оператора присвоения




Глава25


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

Опасная работа, коварная работа, кошмарная работа... Знакомство с перегрузкой оператора присвоения Зашита членов

 

 

главе 24,                         операторов", в общих чертах рассматриваются вопросы перегрузки операторов для определенных вами классов. Независимо от того,

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

Вообще говоря, перегрузка операторов в C++ довольно опасное занятие. Однако, если вы будете следовать приведенному в этой главе шаблону, то с перегрузкой опера- тора присвоения cperator = () никаких проблем не возникает.

 

Опасная кошма/гноя

В языке С определен только один оператор, который может быть применен к струк- турированным типам: оператор присвоения. Приведенный ниже пример был бы коррек- тен в С, и его результатом была бы побитовая копия структуры source в destination :

voi d

{

struct mistrust source, destination; destination source;

}

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

operator={) по умолчанию для всех пользовательских классов. Этот оператор по умолчанию выполняет почленное копирование для каждого члена класса. И, конечно же, этот оператор может быть перегружен с помощью функции () в любом пользовательском классе.

Оператор присвоения очень похож на конструктор копирования, с которым вы встречались в главе  19,  "Копирующий       При использовании оператор присвоения и конструктор копирования выглядят почти идентично:

void

{

newMC   // Конструктор копирования

=         // Оператор

}

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

newMC, самого объекта newMC еше не существует. А когда вызывается оператор при- своения. newMC уже является полноценным объектом класса MyClass.

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


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

с

Эта процедура аналогична перегрузке любого другого оператора. Например, в при- веденной ниже программе оператор присвоения реализован как встроенная функция- член класса Name (не забывайте, что оператор присвоения должен быть функцией- членом класса).

<stdlib.h>

#include class Name

{

public:

 

{

=

)

 

{

 

}

s)

{

 

}

 

{

 

// оператор присвоения

s)

{

// Сперва уничтожим существующий объект...

 

тем, как заменить его новым

 

// Вернем ссылку на существующий объект return *this;

 

protected:

// copyName — копирует исходную строку pN в локально

//      выделенный блок памяти void     *pN)

 

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 212; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.009 с.)
Главная | Случайная страница | Обратная связь