Допустимо бросать в конструкторе.И, как правило, лучшая практика - быстро терпеть неудачу и рано выходить из строя.В вашем случае, например, лучше всего добавить конструктор, чтобы ошибка могла быть заранее обнаружена в коде, отвечающем за отправку неверных данных.Если вы вместо этого выбрасываете позже, когда фактически используете методы треугольника, код, который будет нарушен этим исключением, не виноват (они ничего не могут сделать по-другому, чтобы предотвратить исключение).Обычно это означает, что вам придется искать, где был создан объект, чтобы устранить ошибку.
Одна из главных обязанностей конструкторов, в первую очередь, состоит в том, чтобы гарантировать, что объекты могут быть созданы только в допустимом состоянии.Таким образом, не только допустимо выбрасывать, если параметры приведут к тому, что объект находится в недопустимом состоянии, но и это правильно, почему конструкторы существуют в первую очередь.