Блок задач

3. Простые классы

Сложность 2

Задача «Простой класс времени»

Реализовать Простой класс SimpleTime.

Постановка задачи

Реализовать класс SimpleTime. public и protected методы классов фиксированы, кроме спецификаторов. Т.е. нельзя менять названия методов, а также типы и количество аргументов. НО в этих методах отсутствуют спецификаторы const и static, которые были удалены намеренно. Их необходимо вернуть на место.

private поля и private методы можно добавлять в класс SimpleTime.

class SimpleTime {
public:
  SimpleTime();
  SimpleTime(int hours, int min, int sec, int msec);
  SimpleTime(const char* str);
  SimpleTime addMSecs(int ms); 
  SimpleTime addSecs(int s);  
  int hour();
  int minute(); 
  int second(); 
  int msec(); 
  bool isValid(); 
  int msecsTo(const SimpleTime & t); 
  int secsTo(const SimpleTime & t);  
  bool setHMS(int h, int m, int s, int ms = 0); 
  size_t toString(char* buff, size_t buffer_size); 
  bool operator!=(const SimpleTime & t);
  bool operator<(const SimpleTime & t);
  bool operator<=(const SimpleTime & t);
  bool operator==(const SimpleTime & t);
  bool operator>(const SimpleTime & t);
  bool operator>=(const SimpleTime & t);

  static SimpleTime Now(); 
}; 
  • SimpleTime() -- Конструктор по умолчанию.
  • SimpleTime(int hours, int min, int sec, int msec) --
  • SimpleTime(const char* str) -- Создаёт объект из строки формата "hh:mm:ss.ms"
  • SimpleTime addMSecs(int ms) -- порождает новый объект со сдвигом в миллисекундах
  • SimpleTime addSecs(int s) -- порождает новый объект со сдвигом в секундах
  • int hour() -- возвращает кол-во часов
  • int minute() -- возвращает кол-во минут
  • int second() -- возвращает кол-во секунд
  • int msec() -- возвращает кол-во миллисекунд
  • bool isValid() -- корректно ли время. isValid() возвращает false если
    1. вызвали SimpleTime(const char* str) с неправильной строкой
    2. вызвали SimpleTime(int hours, int min, int sec, int msec) или setHMS(int h, int m, int s, int ms = 0) с неправильными параметрами, например отрицательными или hours >= 24, min >= 60, sec>=60, msec >= 1000 и т.д.
  • int msecsTo(const SimpleTime & t) -- возвращает кол-во мсек до события
  • int secsTo(const SimpleTime & t) -- возвращает кол-во сек до события
  • bool setHMS(int h, int m, int s, int ms = 0) -- установить новую дату
  • size_t toString(char* buff, size_t buffer_size) -- преобразует SimpleTime в строку, согласно формату "hh:mm:ss.ms". char* buff - Буфер для строки, size_t buff_lenght - длина буфера. Возвращает количество записанных в буфер байт (включая заключительный ноль). Если в буфере не достаточно места или buff равен NULL, в буфер ничего не записывается и возвращается количество байт, необходимое для правильного вывода (включая заключительный ноль).
  • bool operator==(const SimpleTime & t) -- Оператор ==, возвращает true если аргумент равен исходному SimpleTime
  • bool operator!=(const SimpleTime & t) -- Оператор !=, возвращает true если аргумент не равен исходному SimpleTime
  • bool operator>=(const SimpleTime & t) -- Оператор больше либо равно
  • bool operator<=(const SimpleTime & t) -- Оператор меньше либо равно
  • bool operator>(const SimpleTime & t) -- Оператор больше
  • bool operator<(const SimpleTime & t) -- Оператор меньше
  • static SimpleTime Now() -- возвращает текущее время

Примечание

Время ограничено 24-я часами и заворачивается(wrap) при переполнении. Отрицательный результат операций типа addSec(..) и addMSec(..) то-же заворачивается в положительную сторону.

Требования

  1. public и protected методы классов фиксированы. Т.е. нельзя менять названия методов, а также типы и количество аргументов.
  2. Названия header и source файлов следующие: SimpleTime.hpp, SimpleTime.cpp.
  3. Написать unit test'ы для реализованных классов.