Используя предоставленную заготовку, реализуйте и верифицируйте класс, моделирующий универсальную единицу длины (LengthUnit). В проект уже добавлены все необходимые для сборки файлы. Объявление класса следует разместить в файле lengthunit.hpp, а реализацию - в файле lengthunit.cpp.
Предоставленный файл lengthunit_test.cpp содержит тестовую программу. Собственную функцию main() реализовывать не нужно, следует сосредоточиться лишь на интересующем классе.
Должны поддерживаться как метрические длины. так и принятые английские единицы (футы+дюймы). Допускается отрицательное значение длины. В случае работы с английскими единицами, количество футов может быть отрицательным, а количество дюймов всегда находится в интервале от 0 до 11. Английские единицы являются целочисленными. При переводе из метрических в английские, значения округляются.
В классе должна поддерживаться следующая функциональность:
Конструктор по умолчанию. Устанавливается нулевая длина.
Конструктор, принимающий длину в метрах в виде числа типа double.
Конструктор, принимающий длину в виде целочисленных футов и дюймов отдельными переменными. Если число дюймов не лежит в интервале от 0 до 11, генерируется исключение с текстом “Inches out of range”.
Конструктор, принимающий длину в метрах или английских компонентах в виде строки, например 1.53m или 6’10” (шесть футов десять дюймов). Если формат не удалось распознать, генерируется исключение с текстом "Bad format". Если число дюймов не лежит в интервале от 0 до 11, генерируется исключение с текстом “Inches out of range”.
Метод getAsMeters(), возвращающий длину в метрах в виде числа типа double.
Метод преобразования в английские единицы с округлением со следующим интерфейсом:
void fetchAsEnglish ( int & _feet, int & _inches ) const;
Метод toMetricString() для преобразования в метрическую строку.
Метод toEnglishString() для преобразования в английскую строку.
Перегруженные операторы сравнения ==, !=, =, .