Обратите внимание, что это задает вопрос о конструкторах, а не о классах, которые обрабатывают время.
Предположим, что у меня есть класс:
class Time
{
protected:
unsigned int m_hour;
unsigned int m_minute;
unsigned int m_second;
public:
Time(unsigned int hour, unsigned int minute, unsigned int second);
};
В то время как я хочу, чтобы он был успешно создан, я хотел бы, чтобы конструктор b завершился с ошибкой.
Time a = Time(12,34,56);
Time b = Time(12,34,65); // second is larger than 60
Однако это невозможно, потому что конструкторы не возвращают никаких значений и всегда будут успешными.
Как бы конструктор сказал программе, что он не доволен? Я подумал о нескольких методах:
- имеет конструктор, генерирующий исключение, и имеет обработчики в вызывающей функции для его обработки.
- имеет флаг в классе и устанавливает его в true, только если значения приемлемы конструктором и программа проверяет флаг сразу после построения.
- имеют отдельную (возможно статическую) функцию для вызова для проверки входных параметров непосредственно перед вызовом конструктора.
- перепроектируйте класс так, чтобы он мог быть построен из любых входных параметров.
Какой из этих методов наиболее распространен в промышленности? Или я могу что-то пропустить?