|
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Часть V. Полезные особенности. Перегрузка оператора присвоения. Перегрузка оператора присвоения
Перегрузка оператора присвоения Опасная работа, коварная работа, кошмарная работа... Знакомство с перегрузкой оператора присвоения Зашита членов
главе 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; Просмотров: 240; Нарушение авторского права страницы