|
{ pair A (9, 19.0); A.display();
++A; A.display ();
- - A; A.display ();
A++; A.display ();
A- -; A.display (); }
Результат:
N = 9 X = 19
N = 10 X = 20
N = 9 X = 19
N = 10 X = 20
N = 9 X = 19
Перегрузка операции присваивания
Перегрузку операции ”=” разрешается реализовывать только через компонентную функцию класса!
Рассмотрим перегрузку для класса комплексных чисел:
Complex& Complex:: operator = (Complex & z)
{ re = z.re; im = z. im;
return * this; }
При выполнении
c2=c1;
операция функция вызывается для объекта с2, объект с1 передается в нее как параметр. Данным объекта с2 присваиваются данные объекта с1.
Функция возвращает текущий объект для того, чтобы можно было использовать операцию множественного присваивания:
с3 = с2 = с1;
Заметим, что в данном случае перегружать операцию присваивания нет особой необходимости. Если не перегружать “=”, то компилятор генерирует операцию присваивания по умолчанию, которая выполняет побайтовое копирование данных.
Однако в некоторых случаях, при наличии в классе данных, являющихся указателями на динамические участки памяти, буквальное копирование может привести к утечкам памяти.
При прямом копировании объект2=объект1 указателю объекта2 присвоится значение указателя объекта1. Участок памяти с данными 2 станет недоступным программе происходит утечка памяти. Уничтожение объекта 1 автоматически уничтожит объект2.
В этом случае необходимо перегрузить операцию присваивания:
class A { int* data;
…
Дата добавления: 2015-07-19; просмотров: 39 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
V.vivod | | | Complex c1; |