Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum-S__wofp.pdf
Скачиваний:
166
Добавлен:
11.02.2015
Размер:
22.69 Mб
Скачать

Лабораторная работа № 4 Перегрузка функций и операций

Лабораторная работа посвящена операционному и объектному полиморфизму. Отдельное внимание уделено перегрузке операции присваивания и потокового ввода-вывода.

200

ОБРАЗЕЦ ОТЧЁТА ПО ЛАБОРАТОРНОЙ РАБОТЕ

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

Задачи

1.Комплексное число задаётся своими вещественной и мнимой частями. Реализовать сложение/вычитание чисел, произведение двух чисел, деление чисел, возведение в целочисленную степень, извлечение квадратного корня.

2.Время задаётся в формате чч:мм:сс. С учётом суток реализовать: сложение времени и определённого пользователем числа секунд, вычитание из заданного времени определённого числа секунд, сложение двух моментов времени, вычитание из одного момента времени из другого, подсчёт числа секунд между двумя моментами времени, лежащими в пределах одних суток.

3.Создать класс «бинарное дерево» с перегруженными операторами: += (добавить элемент в дерево), ++ (прохождение по дереву в нисходящем порядке), -- (прохождение по дереву в восходящем порядке), == (поиск по дереву).

4.Определить класс типа «однонаправленный список» с перегруженными операциями: ++ движение по списку вперед; -- удалить элемент списка, на котором стоит указатель; += конкатенация с другим списком и с новым элементом; - унарный минус удаляет элемент с конца списка, =, ==, !=, >, <, <=, >=; обеспечить ввод/вывод в поток.

5.Создать класс комплексных чисел complex. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа int, double, complex.

6.Вектор в 3-х мерном пространстве. Реализовать: сложение, вычитание, скалярное, векторное произведение, умножение вектора на скаляр.

7.Комплексное число задается своим модулем и углом. Реализовать сложение/вычитание чисел, произведение двух чисел, деление чисел, возведение в целочисленную степень, извлечение квадратного корня.

219

8.Создать объект типа «связный двунаправленный список», с перегруженными унарными операциями ++, -- (постфиксными и префиксными) для движения по списку вперед и назад.

9.Создать два класса «целое» и «матрица». Определить конструкторы: по умолчанию, с параметром (для класса «матрица» с двумя параметрами). Определить конструктор копирования, деструкторы. Определить функцию-член класса для умножения матрицы на целое.

10.Создать объект типа «очередь». Перегрузить операторы ++ и -- как функции-члены класса (постфиксные и префиксные): ++ добавляет элемент в очередь (пустой элемент, например int i=0), -- извлекает элемент из очереди. Оператор ! проверяет очередь на отсутствие элементов.

11.Создать объект типа «однонаправленный список», в котором определены операции: + добавляет в конец списка, += добавляет в этот же список в конец списка. - удаляет указанный элемент из списка (номер элемента определяется через параметр), = присвоение списков, сравнение списков ==, !=, >, <, >=, <=, [] получение элемента списка, ++ устанавливает указатель на следующий элемент списка.

12.Создать класс целых чисел Integer. Определить перегруженную функцию, возвращающую больший из двух аргументов. Функция не является членом класса целых чисел. Перегруженные функции имеют аргументы типа int, double, Integer. Тела перегруженных функций должны быть одинаковыми.

13.Создать класс «вектор», содержащий ссылку на int, размерность вектора и переменную ошибки. Класс имеет конструкторы по умолчанию, конструктор с одним и двумя параметрами, конструктор копирования и деструктор. Определить операторы: +, -, *, -, =, +=, -=, *=, [] - как функции-члены класса. Определить функцию печати. Выполнить перегрузку операторов вывода и ввода в поток.

220

14.Создать объект типа «стек». Перегрузить операторы +, - и * как функциичлены класса: + создает новый стек и добавляет в него элемент, - извлекает элемент из стека, * умножает вершину стека на параметр. Стеки можно присваивать (=), проверять на равенство (==) или неравенство (!=), вводить и выводить в поток, добавлять (+= ) элемент в стек.

15.Создать класс «матрица», содержащий ссылку на int, число строк и столбцов и состояние ошибки. Определить конструкторы по умолчанию, конструктор с одним и с двумя параметрами, конструктор копирования, деструктор. Определить операторы: =, +, -, +=, -=, *, *= для работы с объектами этого класса и с произвольным целым числом. Определить оператор [] так, чтобы обращение [][] к элементам имело смысл, аналогичный встроенному в язык С++. Перегрузить операторы вывода и ввода в поток.

16.Задана строка символов. Реализовать: сравнение строк, удаления из строки указанного символа(ов), конкатенацию строк, инверсию строки, перевода строки в верхний/нижний регистр.

17.Создать класс целых чисел. Определить операторы + как функцию-член класса и - как дружественную функцию.

18.Определить класс «множество целых чисел». Реализовать следующие операции: объединение двух множеств, пересечение двух множеств, разность двух множеств, добавление элемента во множество, удаление элемента из множества.

19.Создать класс целых чисел. Определить операторы ++ и -- как функциичлены класса.

20.Для работы с матрицей MxN реализовать следующие операции: сложение/вычитание двух матриц, умножение двух матриц, возведение матрицы в степень.

21.Создать два класса «вектор» и «матрица». Определить конструкторы: по

221

умолчанию, с параметром (для класса «матрица» с двумя параметрами). Определить конструктор копирования, деструкторы. Определить функцию-член класса для умножения матрицы на вектор.

22.Определить класс «множество символов ASCII». Реализовать: добавление/удаление элемента из множества, объединение/пересечение двух множеств, разность двух множеств, проверку вхождения одного множества в другое.

23.Создать класс «координаты». Определить операторы + и - как функциичлены класса. Сложить и вычесть координаты друг с другом, переменной и константой. Присвоить координаты (=), сравнить координаты (==; !=).

24.Определить класс для работы с рациональными числами. Реализовать: сложение/вычитание двух чисел, умножение/деление двух чисел, приведение числа к несократимому виду, вывод числа в виде m/n; сравнение двух чисел.

25.Создать объект типа «динамический стек». Перегрузить операции +, +=, -, -= для выполнения манипуляций с элементами динамического стека.

26.Создать объект типа «динамическая очередь». Перегрузить операции +, --, +=, -=, =, !=, ==, >=, <=, >, <, обеспечить ввод/вывод в поток.

27.Создать класс типа «координаты» с унарным ++ и --, -. Операции ++ и -- постфиксные и префиксные, унарный минус инвертирует знак у обеих координат.

28.Создать объект типа «двунаправленный список», в котором определены операции: + создает список и добавляет элемент в него элемент, += добавляет в этот же список в конец списка, - удаляет указанный элемент из списка (номер элемента задается через параметр), = присвоение списков, сравнение списков ==, !=, >, <, >=, <=, [] получение элемента списка, ++ устанавливает указатель на следующий элемент, -- устанавливает указатель на предыдущий элемент списка.

29.Определить класс «комплексные числа», перегрузив различные

222

операторы, +, -, ++, --, +=, -=, *, /, *=, /=, !, !=, ==, >,<, >=, <=, ввода и вывода в поток. Сложение и вычитание чисел должно производиться как с объектами данного класса, так и с константами и переменными типа float.

30.Создать объект типа «очередь». Перегрузить операторы + и * как функциичлены класса: + добавляет элемент в очередь, * умножает заданный элемент в очереди, -- извлекает элемент из очереди. Очереди можно присваивать (=), проверять на равенство (==) или неравенство (! =), вводить и выводить в поток, добавлять (+=) элемент в очередь.

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

32.Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность: перемещения прямоугольников на плоскости (++, --), изменения размеров (+=, -=). Создать функции-члены класса: построение наименьшего прямоугольника, содержащего два заданных прямоугольника; создание прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.

33.Создать объект типа «однонаправленный список», в котором определены постфиксные и префиксные операции: ++ добавляет в конец списка, -- удаляет элемент из списка.

34.Для даты дд/мм/гггг с учётом високосных годов реализовать: сложение даты с определённым количеством дней, вычитание из даты определённого количества дней, вычисление числа дней между двумя датами.

223

35.Создать класс «сигнал» таким образом, чтобы на его основе реализовать двухбайтовые данные, собранные с платы сбора данных и данные типа float, полученные программно. Определить конструктор по умолчанию, конструктор с параметром, конструктор копирования, деструктор. Переопределить операторы: =, +=, -=, +, -, *, [], сохранения в файл.

224