Перевантаження операції доступу до члена класу

Операцію доступу до члена класу можна перевантажити через покажчик (->). Перевантажується він так: operator->(). Функція-член operator->() має повертати покажчик на об'єкт класу. Наприклад:

class MyClass {

public:

int x,y;

MyClass(int_x,int_y){x=_x;y=_y;}

MyClass*operator->();

};

MyClass*MyClass::operator->()

{

x*=2;

y*=2;

cout<<"\nПеревантажений оператор:";

return this;}

У цьому прикладі перевантажена операція подвоює значення полів і видає коротке повідомлення перед тим, як повернути покажчик this. В основній програмі можемо записати:

Main()

{MyClass a(12,25);

cout<<a->x<<'\n';

cout<<a->y<<'\n';

return 0;}

Зазначимо, що в main()- функції перевантажена операція -> уже застосовується не до покажчика на клас, а до екземпляра класу. Якщо описати покажчик на клас і застосувати операцію ->, то викличеться стандартна операція доступу до поля, а не перевантажена. Перевантажені операції працюють лише з екземплярами класів, у яких вони перевантажуються.

Наведені в main -функції операції a->x та a->y виконуються так:

(a.operator->())->x<<"\n";

(a.operator->())->y<<"\n";

Перевантаження операцій інкремента й декремента

У ранніх версіях С++ неможливо відрізнити постфіксні та інфіксні форми при перевантаженні операцій. Починаючи з версії 4.5, це можна зробити, наприклад, так:

Class MyClass

{int x;

public:

MyClass(int_x){

x=_x;}

int operator++() {

return++x;}

int operator++(int){return x++;}

int operator--(){return--x;}

int operator--(int){return x--;}

Int Getx(void)

{return x;}};

Нехай визначено екземпляр

MyClass v;

Тоді еквівалентними такі конструкції:

v++; та operator++(0)(v);

++v; та operator ++()(v);

main() {

TanyClass t(100);

cout<<t++; //

cout<<++t; //}

Перевантаження операцій керування


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: