9. Перегрузка стандартных операций.

Привлекательной особенностью С++ является возможность распространения действия стандартных операций на операнды, для которых эти операции первоначально в языке не предназначались. Для появления возможности использовать стандартную для С++ операцию  (+ или *) с необычными для нее данными,  необходимо специальным образом определить ее поведение.  Это возможно,  если хотя бы один из операндов является объектом некоторого класса.  Для перегрузки операции на новые пользовательские типы данных  необходимо определить специальную функцию,  называемую “операция-функция”.  Формат определения  операции-функции:

тип_возвращаемого_значения operotor знак_операции(параметры) { операторы тела }

Для объекта класса Т можно ввести следующую функцию:

Т  оператор * (Т х,  Т y) { . . . }

Количество операндов у операции-функции зависит от арности операции и от способа определения функции.  Для обеспечения явной связи с классом  операция-функция должна быть либо компонентом класса,  либо определена как дружественная данному классу,  либо у нее должен быть хотя бы один параметр типа класс (или ссылка на класс).

Если для класса  Т  введена операция-функция с приведенным выше заголовком,  то выражение А*В интерпретируется как вызов функции operator *(A, B)

Перегрузим операцию ‘ + ‘ на объекты класса Pointe.

.h

using namespace std;

 

struct Pointe

{

                int x, y;

                Pointe(int xx, int yy) : x(xx), y(yy) {};

                Pointe operator + (Pointe &other);

                void display()

                {

                               cout << x << " and " << y << "\n";

                }

};

 

Pointe Pointe::operator + (Pointe &other)

{

                return Pointe(x + other.x, y + other.y);

}

 

.cpp

#include "c_console.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

                Pointe p1(1, 2);

                Pointe p2(10, 20);

                Pointe p3(0, 0);

                p3 = p1 + p2;

                p3.display();

                _getch();

                return 0;

}


 

Hosted by uCoz