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


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


В качестве примера рассмотрим переопределение стандартных операций над датами:


//------------------------------------------------------bk73-03.cpp


//------Переопределение операций в классе "дата"


static int days[]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};
class dat
{
int day,month,year;
public:
void next(); // Элемент-функция вычисления


// следующего для


dat operator++(); // Операция ++


dat operator+(int); // Операция "дата + целое" с передачей


// первого операнда через this


// Операция с явной передачей


friend dat operator+(int,dat); // всех аргументов по значению


dat(int=0,int=0,int=0);
dat(char *); //


~dat(); //


}; //


//------ Функция вычисления следующего дня -----------------


// Используется ссылка на текущий объект this,


// который изменяется в процессе операции


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


void dat::next()
{
day++;
if (day &#62 days[month])
{
if ((month==2) &#38&#38 (day==29) &#38&#38 (year%4==0)) return;
day=1; month++;
if (month==13)
{
month=1; year++;
}
}
}
//------ Операция инкремента даты -------------------------


// 1. Первый операнд по указателю this


// 2. Возвращает копию входного объекта (операнда)


// до увеличения


// 3. Соответствует операции dat++ (увеличение после


// использования)


// 4. Замечание: для унарных операций типа -- или ++


// использование их до или после операнда не имеет


// значения (вызывается одна и та же функция).


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


dat dat::operator++()
{ // Создается временный объект


dat x = *this; // В него копируется текущий объект


dat::next(); // Увеличивается значение текущего объекта


return(x); // Возвращается временный объект по


} // значению


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


// 1. Первый операнд по указателю this


// 2. Входной объект не меняется, результат возвращается


// в виде значения автоматического объекта x


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




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



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