Лабораторная работа №3 «Перегрузка операций»
Задание 4.В классе, реализованном в задании №2, необходимо перегрузить нижеследующие операции, при этом две функции-операции должны быть реализованы как методы класса, а одна – как дружественная функция:
· Присваивание «=»;
· Сложение (в случае символьных полей сложение понимается как конкатенация) «+»;
· Соответствие (равенство) «==».
Указания к решению (вариант 30)
Напомним, что класс, описывающий Буддистские монастыри Японии имеет следующие поля:
Название.char *name;
Школа. char *school;Тип этого поля претерпел изменения, вызванные новыми условиями. На первый взгляд, тип этого поля можно оставить прежним char. Но на самом деле оказывается, что для выполнения перегрузки оператора суммы и корректного выполнения программы, тип данного поля необходимо определить как char *. Это можно объяснить тем, что при перегрузке оператора суммы необходимо произвести конкатенацию символьных полей.
Количество монахов. unsigned int count;
Площадь земли. float square;
Пусть разрабатываемый класс, назовем его Church, должен иметь следующие функции-операции, являющиеся методами:
1. Сhurch& operator = (Сhurch&);
Данная функция производит перегрузку оператора присваивания, то есть выполняет присваивание полей одного объекта класса полям другого объекта этого же класса. Как и в задании №2, для корректной работы со строками требуется динамическое выделение памяти и ее освобождение.
2. int operator == (Сhurch&);
Функция позволяет установить соответствие между экземплярами одного класса. Ее тело включает проверку на равенство значений числовых полей и сравнение содержимого строк, которое выполняется с помощью функции strcmp. В зависимости от того, тождественны ли экземпляры функцией, возвращается 0 или 1.
int Church::operator == (Church & c) {
if ((count != c.count) ||
(ceil(square)!=ceil(c.square)) ||
(strcmp(name,c.name) != 0) ||
(strcmp(school,c.school) != 0)
)
Return 0; //ложь
Else
Return 1;//истина
}
и функцию-операцию, являющуюся дружественной функцией:
3. friend Сhurch operator + (Сhurch&, Сhurch&);
Оператор + необходимо перегрузить способом, аналогичным своему традиционному арифметическому использованию. Поэтому важно, чтобы ни один из операндов не менялся. Например, когда вы складываете 10+4, результат равен 14, но ни 10, ни 4 не меняются. Таким образом, внутри функции необходим временный объект для хранения результата.
Задание 5.
· Реализовать заданную динамическую структуру данных, с которой можно работать через перегруженные операции.
· Для демонстрации работы программы необходимо реализовать меню, позволяющее вызывать операции реализованной структуры данных. На экране должна отображаться вся последовательность введенных элементов, над которыми производятся действия.
5.1.Создайте класс, реализующий стек. В интерфейс класса должны входить перегруженные операции:
1) положить в стек (<<);
2) взять из стека (>>).
5.2.Создайте класс, реализующий стек. В интерфейс класса должны входить перегруженные операции:
1) положить в стек (+);
2) взять из стека (-).
5.3.Создайте класс, реализующий однонаправленную очередь. В интерфейс класса должны входить перегруженные операции:
1) добавить элемент в конец очереди (<<);
2) извлечь элемент из начала очереди (>>).
5.4.Создайте класс, реализующий однонаправленную очередь. В интерфейс класса должны входить перегруженные операции:
1) добавить элемент в конец очереди (+);
2) извлечь элемент из начала очереди (-).
5.5.Создайте класс, реализующий двунаправленную очередь. В интерфейс класса должны входить перегруженные операции:
1) добавить элемент в конец очереди (>=);
2) добавить элемент в начало очереди (<=);
3) извлечь элемент из начала очереди (<<);
4) извлечь элемент из конца очереди (>>).
5.6.Создайте класс, реализующий двунаправленную очередь. В интерфейс класса должны входить перегруженные операции:
1) добавить элемент в конец очереди (+);
2) добавить элемент в начало очереди (<<);
3) извлечь элемент из начала очереди (>>);
4) извлечь элемент из конца очереди (-).
5.7.Создайте класс, реализующий двунаправленный список. В интерфейс класса должны входить перегруженные операции:
1) переместиться в начало списка (--);
2) переместиться в конец списка (++);
3) передвинуть указатель на один элемент вправо (>);
4) передвинуть указатель на один элемент влево (<);
5) добавить элемент в текущее положение указателя (+);
6) удалить элемент по текущему положению указателя (-).
5.8.Создайте класс, реализующий двунаправленный список. В интерфейс класса должны входить перегруженные операции:
1) переместиться в начало списка (++);
2) переместиться в конец списка (--);
3) передвинуть указатель на один элемент вправо (>=);
4) передвинуть указатель на один элемент влево (<=);
5) добавить элемент в текущее положение указателя (<<);
6) удалить элемент по текущему положению указателя (>>).
5.9.Создайте класс, реализующий дерево поиска. В интерфейс класса должны входить перегруженные операции:
5) добавить элемент (+);
6) удалить элемент (-).
5.10.Создайте класс, реализующий дерево поиска. В интерфейс класса должны входить перегруженные операции:
5) добавить элемент (<<);
6) удалить элемент (>>).