Получить работу
Тема: «Перегрузка операций»
Цель работы: Изучить механизм перегрузки операций.
Задание: Все классы следует наделить конструкторами, деструктором. Необходимо явно реализовать конструктор копирования и перегрузить оператор присваивания. Необходимо подготовить демонстрацию по работе перегруженных для класса операторов.
Варианты:
- Напишите класс Bird, содержащий строковый элемент и статический int. В конструкторе по умолчанию используйте int для автоматической генерации идентификатора, который вы встраиваете в строку, вместе с именем класса (Bird # 1, Bird # 2 и т. Д.). Добавьте оператор << для ostreams, чтобы распечатать объекты Bird. Напишите оператор присваивания = и конструктор копирования. В main () убедитесь, что все работает правильно.
- Создать класс, описывающий тип Time. Класс должен включать в себя атрибуты, описывающие часы, минуты, секунды и иметь метод для вывода времени на экран. Для данного класса перегрузить следующие бинарные операторы: суммы(+), разности (-).
- Создайте класс RationalNumber со следующими возможностями:
- · Создайте конструктор, который предотвращает использование знаменателя 0 в дроби, уменьшает или упрощает дроби, которые не находятся в сокращенной форме, и избегает отрицательных знаменателей.
- · Перегрузите операторы сложения, вычитания, умножения и деления для этого класса.
- · Перегрузите операторы отношения и равенства для этого класса.
- Напишите класс Time, который представляет время. В классе должно быть три поля для часов, минут и секунд. У него должен быть конструктор для инициализации часов, минут и секунд. Метод printTime () для печати текущего времени. Перегрузите следующие операторы: оператор плюс (+) (сложить два объекта времени на основе 24-часовых часов) и < (сравните два временных объекта).
- Создать класс ZooAnimal, включающий в себя атрибуты, описывающие имя животного, вид животного, номер клетки, вес, дата взвешивания и иметь метод для вывода информации о животном по номеру клетки и конструктор с инициализацией данных. Реализовать метод вывода на экран информации о животных по номеру клетки. Перегрузить следующие бинарные операторы: проверка на соответствие введенной дате взвешивания (==), уменьшать вес на 1 кг (-=).
- Создать класс String. Объект класса должен характеризоваться следующими свойствами: длина строки, динамически выделяемый массив символов, заканчивающийся символом ‘ ’, для хранения элементов строки. Предусмотреть несколько конструкторов для создания объектов класса, в том числе и конструктор с параметром, который задает длину будущей строки. Для данного класса реализовать метод вывода строки на экран, перегрузить следующие бинарные операторы: сцепление строк (+), удаление подстроки из строки (-) {“qwert”-“we”=qrt”, {“qwerty”-“tu”=“qwerty”, “qwert”-“qwert”=””}. Учесть тот случай, когда результатом операции может быть пустая строка (строка нулевой длины).
Мой вариант: 6. В этот раз я решил реализовать класс с использованием string и vector. Основная строка будет храниться в векторе, состоящем из char.
...
Метод print() в цикле проходится от 0 до _len и выводит _str, если константа SHOW_LEN равна правде, то дополнительно выводится длинна строки.
Operator + в цикле проходится по второй строке и добавляет её элементы к созданному вектору на основе вектора _str. А затем полученный вектор передается в конструктор и возвращается в качестве объекта.
Operator - проверяет, что подстрока по длине меньше строки, затем создаются два временных вектора (переданной строки и строки _str). После чего создаётся еще один вектор, в который будет помещаться текущая проверяемая подстрока, которая с каждой иттерацией цикла будет смещаться на 1 символ вперёд, примерная иллюстрация, представлена на рисунке 1.
Когда функция находит подстроку в строке, она записывает во второй временный вектор всю строку до начала подстроки и после её конца (начало подстроки + её длина).
Если константа CUT_ALL_SUBSTRINGS равна правде, то программа продолжает поиск и удаление подстрок, и так как используется дополнительный вектор-буфер, данные переписываются из него, что позволяет удалить все подстроки из строки.
По завершению цикла полученный вектор-буфер в виде объекта MyString возвращается пользователю.