Задать вопрос

Что делает этот конструктор?

Прохожу курс на Stepik по плюсам, возникли трудности в понимании одного момента в задаче.

Часть условия из задачи:
Определен следующий класс (он также приведен в комментарии в шаблоне кода):
struct Cls {
    Cls(char c, double d, int i);
private:
    char c;
    double d;
    int i;
};


Что делает конструктор Cls(char c, double d, int i);
Он же не задает значения полей, а аргументы в него передаются.
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
Это объявление (declaration) конструктора. Значения полей должны быть заданы в определении (definition). Раз определения тут нет, значит, его нужно искать где-то в другом месте. Возможно, вы найдёте его в одном из следующих шагов. Возможно, его написание оставлено как упражнение для читателя. Возможно, содержимое конструктора (присвоение параметров полям) авторы посчитали очевидным.

Пример определения, которое должно следовать за таким классом:
Cls::Cls(char c, double d, int i)
    : c(c), d(d), i(i) {}
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Что делает конструктор по этому фрагменту кода сказать нельзя.
В представленном фрагменте кода только объявление конструктора. Это значит, что определение его находится где-то в другом месте. Определение содержит весь код функции, а объявление только сигнатуру (возвращаемое значение + название + параметры).

Учитывая, что набор параметров конструктора такой же как и набор членов данных класса, можно предположить, что конструктор просто инициализирует члены класса. Возможно, проверяет допустимость переданных параметров. Но это может быть совсем не так или только частично так. Без определения конструктора (его полного кода) нельзя в точности сказать, что он делает.
Кстати, определение может содержать и пустое тело функции, но и в этом случае оно отличается от объявления. Пустой конструктор может быть определен например так:
Cls::Cls(char c, double d, int i) {};
или содержать список инициализации с пустым телом:
Cls::Cls(char c, double d, int i): c(c), d(d), i(i) {};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
21 дек. 2024, в 09:14
1000 руб./за проект
21 дек. 2024, в 06:04
15000 руб./за проект
21 дек. 2024, в 01:12
1000 руб./за проект