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

Проект «Яблоки»

Весь проект должен размещаться в трёх файлах: Apple.h, Apple.cpp, main.cpp.

Каждая определённая в проекте перегруженная операция должна проверяться в main с помощью assert, иначе баллы за неё не выставляются. 

  1. Объявите перечислимый тип для цвета яблока:

    enum AppleColor {green, yellow, red}; // можно enum class
  2. [1 балл] Объявите класс Apple, содержащий следующие поля:

    • _color типа AppleColor;
    • _weight типа double.

    Реализуйте конструктор со списком инициализации и константные функции-члены для чтения значений полей. Параметры конструктора должны иметь значения по умолчанию: green и 0.2.

  3. [1.5 балла] Определите операцию чтения из потока.

    	friend istream& operator>>(istream&, Apple&);
    
    Вводиться из потока должно два числа: целое число для задания цвета (0, 1 или 2) и вещественное число для задания веса. Операцию ввода необходимо сделать дружественной, так как нужен доступ к полям класса на запись. Определите операцию прямо внутри класса.

  4. [2 балла] Определите операции сравнения на равенство и неравенство как внешние функции.

    bool operator==(const Apple &a, const Apple &b);
    bool operator!=(const Apple &a, const Apple &b);
    Два яблока считаются одинаковыми, если совпадают их цвет и вес. Указание: операция неравенства определяется в терминах операции сравнения на равенство.

  5. [2.5 балла] Определите префиксную и постфиксную операцию ++, она должна превращать зелёное яблоко в жёлтое, жёлтое в красное, а красное оставлять без изменения.
    Указание: Перед тем, как приступить к заданию, ознакомьтесь с примером по ссылке

  6. [3 балла] Определите операции сравнения <, <= как внешние функции. Считается, что одно яблоко меньше другого, если его вес меньше. Если вес двух яблок совпадает, то необходимо учитывать цвет: зеленое яблоко меньше жёлтого, а жёлтое меньше красного. Реализация нестрогого неравенства должна использовать операции строгого неравенств и сравнения на равенства.

Дополнительные задачи

Перед началом решения дополнительных задач получите у преподавателя одобрение выполненной ранее работы.

  1. Определите операцию +=, которая увеличивает вес яблока на заданную вещественную величину:

    Apple & operator+= (double d) { /* … */ }
  2. Определите операцию <<=, которая присваивает цвету яблока указанное значение:

    Apple &  operator<<= (AppleColor ac) { /* … */ }
  3. Определите операции и тесты к ним:

    • -- (префиксный и постфиксный) аналогично ++,
    • -= аналогично +=,
    • >, >= аналогично < и <=,
    • << — операцию вывода в поток.