Void set_h (int h)
{
this->h = h;
};
// перевантаження (префіксного) інкремента
Pereg& operator ++()
{++h; return *this;}
// перевантаження (префіксного) декремента - дружня функція
friend Pereg& operator --(Pereg& per);
// перевантаження постфіксного інкрімента
Pereg& operator ++(int)
{h++; return *this;}
// перевантаження постфіксного декремента
Pereg& operator --(int)
{h--; return *this;}
};
// дружня функція
Pereg& operator --(Pereg& per)
{--per.h; return per;}
// звичайна функція (глобальна функція)
bool operator !(Pereg& per)
{
if(per.geth()) return false;
return true;
}
Операції постфіксного інкремента і декремента повинні мати перший параметр типу int. Він використовується тільки для того, щоб відрізнити їх від префіксної.
5.3 Перевантаження бінарних операторів та операторів присвоювання
Бінарна функція-оператор, яка визначається усередині класу, має бути представлена за допомогою нестатичного методу з параметрами, об'єкт, що при цьому викликав її, вважається за перший операнд. Якщо функція визначається поза класом, вона повинна мати два параметри типу класу.
Оператор присвоювання визначений в будь-якому класі за умовчанням як поелементне копіювання. Цей оператор викликається кожного разу, коли одному існуючому об'єкту присвоюється значення іншого. Якщо клас містить поля, пам'ять під яких виділяється динамічно, необхідно визначити власний оператор привласнення. Щоб зберегти семантику присвоювання, функція-оператор повинна повертати посилання на об'єкт, для якого вона викликана, і приймати як параметр єдиний аргумент – посилання на присвоєний об'єкт.
Приклад:
class Pereg2: public Pereg
{
int h;
public:
char* name;
Pereg2(int h):Pereg(h)
{
this->h = h;
}
Pereg2(int h, char* nam):Pereg(h)
{
this->h = h;
if(nam == 0)name = 0;
else
{
name = new char [strlen(nam)+1];
strcpy(name,nam);
}
}
int geth() {return h;}
bool operator >(Pereg2& cl)
{
if( h > cl.geth()) return true;
return false;
}
Pereg2& operator = ( Pereg2 &M)
{
if(&M == this) return *this;
if(name) delete [] name;
if(M.name)
{
name = new char [strlen(M.name)+1];
strcpy(name,M.name);
}
else name = 0;
this->h = M.h;
return *this;
}
};
Дата добавления: 2014-12-26; просмотров: 831;