Я читаю «Ускоренный C++» Эндрю Кенига и Барбары Э. Му, и я нахожусь в главе о конструкторах (5.1).Инициализация конструктора
Они упоминают здесь
Мы сказали, что конструкторы существуют для того, чтобы объекты, созданные с их членами данных в разумном состоянии. В общем, эта цель дизайна означает, что каждый конструктор должен инициализировать каждый элемент данных. Необходимость присвоения членам ценности особенно важна для членов встроенного типа. ...
Хотя мы явно инициализировали только
midterm
иfinal
, другие элементы данных инициализируются неявно. В частности,n
инициализируется конструктором по умолчаниюstring
, аhomework
инициализируется конструктором по умолчаниюvector
.
Класс они говорят о том,
class Student_info {
public:
std::string name() const (return n;}
bool valid() const {return !homework.empty();}
std::istream& read(std::istream&);
double grade() const;
private:
std::string n;
double midterm, final;
std::vector<double> homework;
};
и их конструктор по умолчанию является
Student_info::Student_info(): midterm(0), final(0) {}
Я просто хотел бы уточнить, что это означает, что такие вещи, как int
и double
где ISN 't a std::
до того, как этот термин нужно будет инициализировать конкретно?
«должен быть инициализирован _specifically_» - Вы можете фактически уехать из значения _specific_, и они все равно будут инициализированы все такие основные типы имеют нулевое значение. ': midterm()' будет устанавливать член '0.0', потому что это нулевое значение для' double'. Точно так же, если вы введете член 'int' в список инициализаторов, но не получите начального значения, он будет инициализирован' 0'. – MSalters