Обратите внимание, что здесь задается вопрос о конструкторах, а не о классах, которые обрабатывают время.
Предположим, у меня есть такой класс:
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);
};
Хотя я хотел бы, чтобы a был успешно создан, я бы хотел, чтобы конструктор b потерпел неудачу.
Time a = Time(12,34,56);
Time b = Time(12,34,65); // second is larger than 60
Однако это невозможно, поскольку конструкторы не возвращают никаких значений и всегда будут успешными.
Как конструктор скажет программе, что она не счастлива? Я подумал о нескольких методах:
- имеет конструктор, генерирующий исключение, и имеет обработчики в вызывающей функции для его обработки.
- имеет флаг в классе и устанавливает его в true, только если значения являются приемлемыми для конструктора, и программа проверяет флаг сразу после построения.
- имеет отдельную (возможно, статическую) функцию для вызова, чтобы проверить входные параметры непосредственно перед вызовом конструктора.
- изменить класс так, чтобы он мог быть создан из любых входных параметров.
Какой из этих методов наиболее распространен в промышленности? Или я что-то пропустил?