printЛабораторные работы

printЗадание 2

Тема: Перегрузка операций


I. Реализовать класс


Операции (если есть в задании) =, [], +=, -=, *=, /=, префиксные ++, -- определять как методы.
Для ввода переопределить >> , для вывода - << . Формат ввода-вывода объектов делать так, как указано в задании.
Запись [текст] означает, что текст может отсутствовать, например, конструктор ИмяКласса(a[,b[,c]]) может быть вызван с 1, 2 или 3 аргументами.
Пример:
   Vector a(0,0),b(1.5,0.3);
   cout<<"Введите вектор a:"<<endl;
   cin>>a;   
     //нужно ввести (1.2,3.2) вместе со скобками и запятой
   cout<<a<<" + "<<b<<" = "<<(a+b)<<endl; 
     // печатается (1.2,3.2) + (1.5,0.3) = (2.7,3.5)
II. Реализовать main c тестами (создание объектов и выполнение действий с ними)
III. Написать отчет
  • Постановка задачи
  • Описание интерфейса класса (class {} и комментарии ко всем полям, методам и функциям)
  • Описание тестов для проверки классов (main с комментариями, какие действия выполнялись, полученные результаты)
  • Листинг реализации класса (реализация методов и функций, отступы, без комментариев)

Рекомендации

Для вариантов 8,11,14,17,23 можно хранить все значения в виде одного числа: время в секундах, длина в дюймах и т.д.
Например, для класса Time

class Time {
  int sec;
public:
  Time(int h=0, int m=0, int s=0):sec(h*3600+m*60+s){}

Методы для чтения отдельных составляющих

  int getHour() const { return sec/3600; }
  int getMin() const { return sec/60%60; }
  int getSec() const { return sec%60; }

Операции можно определять в одну строку:

  Time& operator+=(Time t) { sec+=t.sec; return *this; }
  Time& operator*=(int z) { sec*=z; return *this; }

Другим способом является хранение отдельных полей, но для вычислений определить два метода - получение значений полей в виде одного числа и разбиения числа на несколько полей. Этот способ подходит для варианта 10, где формулы занимают несколько строк:

class Date {
  int day,month,year;
  int toJDN() const;
  void fromJDN(int JDN);
public:
  Date(int y=0, int m=0, int d=0):day(d),month(m),year(y){}
  int getDay() const { return day; }
  ...

Операции также можно определять почти в одну строку:

  Date& operator+=(int d) { 
    fromJDN(toJDN()+d);
    return *this; 
  }
  int operator-(const Date& y) const { return toJDN()-y.toJDN();  
loading