
- •Понятие перегрузки операторов
- •Правила перегрузки операторов
- •Перегрузка унарных операторов
- •Файл Dot.h
- •Файл Dot.cpp
- •Файл Main.cpp
- •Перегрузка оператора присваивания
- •Файл Dot.h
- •Файл Dot.cpp
- •Перегрузка бинарных операторов
- •Файл Dot.h
- •Файл Dot.cpp
- •Файл Main.cpp
- •Файл Dot.h
- •Файл Dot.cpp
- •Перегрузка операторов X=
- •Файл Vec.h
- •Файл Vec.h
- •Файл Main.cpp
- •Файл DotVec.h
- •Файл DotVec.h
- •Файл DotVec.h
- •Файл DotVec.cpp
- •Перегрузка операторов инкремента и декремента
- •Файл Vec.h
- •Файл Vec.cpp
- •Файл Main.cpp
- •Файл Vec.h
- •Файл Vec.cpp
- •Файл Main.cpp
- •Перегрузка оператора индексирования
- •Файл Dot.h
- •Файл Dot.cpp
- •Файл Main.cpp
- •Перегрузка оператора вызова функции
- •Файл DotVec.h
- •Файл DotVec.cpp
- •Файл Main.cpp
- •Функции преобразования типа
- •Файл Vec.h
- •Файл Vec.cpp
- •Файл Main.cpp

Лекция 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” |
||
|
||
• • • |
|
Выжол Ю.А. |
Объектно-ориентированное программирование |