Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Лекции PDF / ООП 08 Лек Перегрузка операторов.pdf
Скачиваний:
72
Добавлен:
15.02.2015
Размер:
403.59 Кб
Скачать

Лекция 8

 

Перегрузка операторов

11

// реализация перегруженных операторов инкремента с помощью дружественных функций

 

Vec & operator ++ ( Vec & V)

// префиксная форма

 

{

 

 

 

double buff =

V.x ;

// V.x и V.y обмениваются значениями

 

V.x = -V.y ;

V.y = buffer ;

// через промежуточную переменную buffer

 

return V ;

 

// возвращает ссылку на параметр функции

 

}

 

 

 

Vec operator ++ ( Vec & V , int )

// постфиксная форма

 

{

 

 

 

Vec T = V ;

 

// объявляет временный объект и

 

++ V ;

 

// инициализирует его значением текущего объекта

 

 

// вызывает префиксную форму оператора инкремента

return T ;

 

// возвращает временный объект

 

}

 

Файл Main.cpp

 

#include ”Vec.h”

 

 

 

 

 

void main ( )

 

 

 

{

 

 

 

Dot A ('A') , B ('B') , C ('C') , D ('D') ;

// объявляет вершины квадрата

 

Vec AB ("AB", +A , +B ) ;

// вводит координаты двух вершин квадрата с клавиатуры

~ ( D = A + ++AB ) ;

// объявляет и вычисляет вектор AB

 

// поворачивает вектор на 90°,

 

 

 

// складывает точку A с повёрнутым вектором,

 

 

 

// результат сложения передаёт в точку D,

 

~ ( C = B + AB ) ;

// выводит на экран координаты точки D

 

// складывает точку B с повёрнутым вектором,

 

 

 

// результат сложения передаёт в точку C,

 

// выводит на экран координаты точки C

}

При выполнении программа выводит на экран:

D

Введите координаты точки B

 

 

x = 2

 

 

 

y = 0

 

A

C

Введите координаты точки A

 

 

x = 0

 

 

 

y = 2

 

 

 

Координаты точки D

x = 2

y = 4

B

Координаты точки C

x = 4

y = 2

 

В приведённом примере решена следующая задача. Заданы две соседние вершины квадрата. Нужно вычислить две другие вершины. Приведено одно из двух возможных математических решений.

Перегрузка оператора индексирования

Оператор индексирования, записываемый в виде квадратных скобок [ ], рассматривается как бинарный оператор. При перегрузке он должен быть объявлен как нестатическая функция-член класса, которая принимает один аргумент. Этот аргумент может иметь любой тип. Сам аргумент при этом трактуется как индекс в массиве объектов класса.

Заметим, что функция operator [ ] возвращает ссылку, что позволяет использовать индексированные выражения с любой стороны от знака присваивания. В следующем примере перегрузка оператора индексирования используется для доступа к закрытым членам класса:

class Dot

Файл Dot.h

// класс точки

{

 

• • •

 

public :

 

double & operator [ ] ( int index ) ;

 

} ;

Файл Dot.cpp

#include ”Dot.h”

 

• • •

 

Выжол Ю.А.

Объектно-ориентированное программирование