c++ Огромный конструктор с параметрами

Стоит ли делать конструктор класса (не важно, с параметрами или без) "всеобъемлющим"? Т.е. чтобы конструктор принимал значения для всех параметров класса, которые нужны для корректной его работы? Просто из-за этого он оказывается очень уж длинным. Или можно часть из них оставить на сеттеры, которые получается в обязательном порядке придется использовать после вызова конструктора? Как принято и лучше?


Ответы (1 шт):

Автор решения: Kromster

Обязательных сеттеров быть не должно по многим причинам, но конкретно в вашем случае, по сути, вы делаете объявление еще больше громоздким и многострочным. Вместо условного:

// псевдокод
obj = new ObjClass(a, b, c, d, ...)
.. объект готов

вы получаете:

// псевдокод
obj = new ObjClass(a, b, ...)
obj->SetC(c)
obj->SetD(d, ...)
.. и только теперь объект готов

Очевидно, что второй вариант и длиннее, и более подвержен ошибкам (легко забыть какой-то из сеттеров, или перепутать порядок сеттеров).


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

→ Ссылка