- •Оглавление
- •Блок-схемы линейных алгоритмов
- •Блок-схемы разветвляющихся алгоритмов
- •Блок-схемы циклических алгоритмов
- •Линейные алгоритмы
- •Условный оператор
- •Оператор выбора
- •Оператор цикла
- •Массивы
- •Двумерные массивы
- •Пользовательские функции
- •Указатели
- •Символьные массивы
- •Структуры
- •Поразрядные операции
- •Аргументы по умолчанию
- •Перегрузка функций
- •Перегрузка операций
-
Перегрузка операций
В С++ возможно перегрузить операции для пользовательских типов данных.
Пусть @ – оператор языка С++, кроме . , .* :: ?: sizeof, тогда функция вида
тип operator@(список_аргументов) { ... }
будет выполнять необходимые действия над данными, имеющими тип, указанный в списке аргументов.
Перегрузку операций проиллюстрирует следующая программа (в программе перегружается сложение двух комплексных чисел и комплексного числа с вещественным числом).
#include <stdio.h>
/* определение типа complex – структуры, содержащей два
целочисленных поля: r – действительная часть числа и
i – мнимая часть числа */
typedef struct _complexn {
int r, i;
} complexn;
/* Перегрузка оператора сложения для двух комплексных чисел - операндов типа complexn */
complexn operator+(complexn a, complexn b) {
/* объявление новой переменной для возвращения
результата */
complexn result;
/* сложение действительных частей */
result.r = a.r + b.r;
/* сложение мниых частей */
result.i = a.i + b.i;
/* возврат результата сложения */
return result;
}
/* Перегрузка оператора сложения для комплексного числа
(операнда типа complex) и натурального числа */
complexn operator+(complexn a, int b) {
/* объявление новой переменной для возвращения
результата */
complexn result;
/* сложение действительных частей */
result.r = a.r + b;
/* мнимая часть числа не изменяется */
result.i = a.i;
/* возврат результата сложения */
return result;
}
void main(void) {
/* объявление трех комплексных чисел */
complexn x = {1, 1}, y = {2, 2}, z;
/* сложение двух комплексных чисел */
z = x + y;
printf_s(“%d + i%d\n”, z.r, z.i);
/* сложение комплексного и натурального числа */
z = x + 3;
printf_s(“%d + i%d\n”, z.r, z.i);
}
Задание: перегрузить указанную операцию для указанных типов данных в соответствии с заданием и продемонстрировать её работу.
1. Операция сложения для обыкновенных дробей.
2. Операция вычитания для обыкновенных дробей.
3. Операция умножения для обыкновенных дробей.
4. Операция деления для обыкновенных дробей.
5. Операция сложения для комплексных чисел.
6. Операция вычитания комплексных чисел.
7. Операция умножения для комплексных чисел.
8. Операция деления для комплексных чисел.
9. Операция отношения == для обыкновенных дробей.
10. Операция отношения != для обыкновенных дробей.
11. Операция отношения >= для обыкновенных дробей.
12. Операция отношения <= для обыкновенных дробей.
13. Операция сложения векторов в двумерном пространстве.
14. Операция сложения векторов в трехмерном пространстве.
15. Операция вычитания векторов в двумерном пространстве.
16. Операция вычитания векторов в трехмерном пространстве.
17. Операция скалярного произведения векторов в двумерном пространстве.
18. Операция скалярного произведения векторов в трехмерном пространстве.
19. Операция векторного произведения векторов.
20. Операция умножения вектора на число в трехмерном пространстве.
