Информатика и технология программирования


Переопределение операторов - часть 3



dat dat::operator+(int n)
{
dat x;
x = *this; // Копирование текущего объекта в x


while (n-- !=0) x.next(); // Вызов функции next для объекта x


return(x); // Возврат объекта x по значению


}
//------ Операция "целое + дата" -------------------------


// 1. Дружественная функция с полным списком операндов


// 2. Второй операнд класса dat - передается по значению,


// поэтому может модифицироваться без изменения исходного


// объекта


//--------------------------------------------------------


dat operator+(int n, dat p)
{
while (n-- !=0) p.next(); // Вызов функции next для p


return(p); // Возврат копии объекта p


}
//--------------------------------------------------------


void main()
{
int i;
dat a, b(17,12,1990), c(12,7), d(3), e;
dat *p = new dat[10];
e = a++;
d = b+15;
for (i=0; i&#60 10; i++) p[i] = p[i] + i;
delete[10] p; }

Для многих переопределяемых операций тип результата совпадает с типом одного из операндов. Это позволяет выполнить подряд несколько операций в одном выражении. Возможны различные варианты реализации в соответствии со способами передачи параметров и результата: по значению или по ссылке. Отметим наиболее важные из них:


//------------------------------------------------------bk73-04.cpp


//------ Операция "дата + целое"


// 1. Функция с неявным первым операндом по указателю this


// 2. Меняется значение текущего объекта


// 3. Результат - ссылка на текущий объект


//--------------------------------------------------------


dat&#38 dat::operator+(int n)
{
while (n-- !=0) next(); // Вызов next с текущим объектом


return(*this); // Возврат ссылки на объект this


}
//------ Операция "дата + целое" -------------------------


// 1. Дружественная функция с полным списком аргументов


// 2. Первый операнд класса dat - ссылка, меняется при


// выполнении операции


// 3. Результат - ссылка на операнд


//--------------------------------------------------------


dat&#38 operator+(dat&#38 p,int n)
{
while (n-- !=0) p.next(); // Вызов next для объекта p, заданного ссылкой




Начало  Назад  Вперед



Книжный магазин