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

Рейтинг: 0Ответов: 1Опубликовано: 21.05.2023

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

Ответы

▲ 3Принят

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

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

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

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

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


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