- •I. ПРОЦЕДУРНОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++
- •Лабораторная работа № 1 Линейные алгоритмы
- •Лабораторная работа № 2 Циклы и ветвления
- •Лабораторная работа № 3 Одномерные массивы и строки
- •Лабораторная работа № 4 Двумерные массивы и матрицы
- •Лабораторная работа № 5 Функции
- •Лабораторная работа № 6 Определение типов данных. Перечисляемый тип. Структуры
- •II. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++
- •Лабораторная работа № 1 Понятие класса. Инкапсуляция
- •Лабораторная работа № 2 Организация и обработка списков
- •Лабораторная работа № 3 Наследование. Полиморфизм
- •Лабораторная работа № 4 Перегрузка функций и операций
- •Лабораторная работа № 5 Файловые функции. Работа с файлами
- •III. ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++
- •Лабораторная работа № 1 Современный С++
- •Лабораторная работа № 2 Стандартная библиотека шаблонов С++
- •Лабораторная работа № 3 Визуальная библиотека VCL
- •Лабораторная работа № 4 Графические средства
- •Лабораторная работа № 5 Доступ к базам данных
- •Лабораторная работа № 6 Модульное программирование
- •IV. Оформление отчётов
- •Структура отчёта по лабораторной работе
- •Требования к структурным элементам отчёта
- •Правила оформления отчёта
- •ЛИТЕРАТУРА
Лабораторная работа № 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