Зачем в конструкторе инициализация вне тела конструктора?

есть часть кода

class stack {
public:
     explicit stack (int size = 1000) : max_len (size)
      { // тело конструктора } 
private:
     int max_len;
};


Вопрос в том, зачем инициализация max_len (size) в вызове конструктора, почему не в теле самого конструктора?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
gbg
@gbg
Баянист. Тамада. Услуги.
Потому что без такой инициализации невозможно:
1) Передать параметры в базовые классы
2) Инициализировать константы.
3) Иметь поля, для которых нет умолчательного конструктора

Если с первым вроде как понятненько, то второе требует уточнений. Без такой инициализации, все поля в классе должны сперва создастся при помощи умолчательного конструктора, а потом еще раз инициализироваться уже в теле конструктора. Это двойная работа, что нехорошо.

Кроме того, для полей, у которых нет умолчательного конструктора, в таком случае, выходит что нет способа их адекватно создавать не на куче.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@TheCalligrapher
Странный вопрос. В С++ не существует другого спосба инициалиазции полей класса в определении конструктора. Никакой инициализации "в теле самого конструктора" не существует. О чем вы?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы