Я прохожу ускоренный c ++ и у меня есть вопрос в отношении главы 4. Мы переходим к ссылкам в этом разделе, и я полагаю, что понимаю его использование для манипулирования объектами и переменными. Тем не менее, я действительно не понимаю, почему автор использует & переопределить функцию, уже принадлежащую классу std
Вот код:
Student_info.cpp
istream& read(istream& is, Student_info& s)
{
// read and store the student's name and midterm and final exam grades
is >> s.name >> s.midterm >> s.final;
read_hw(is, s.homework); // read and store all the student's homework grades
return is;
}
main.cpp
while (read(cin, record)) {
// find length of longest name
maxlen = max(maxlen, record.name.size());
students.push_back(record);
}
Может кто-нибудь объяснить, почему мы будем это делать? Это только по педагогическим причинам, чтобы показать, что мы можем? Заранее спасибо.
что я действительно не понимаю, почему автор использует & переопределить функцию, уже принадлежащую классу std
Он не переопределяет функцию.
Он создает новую функцию под названием read
, который возвращает istream&
,
Тот факт, что он возвращает ссылку, является условным (соответствует эквивалентному поведению стандартных библиотечных функций), но имеет мало общего с тем, что он определяет функцию в первую очередь.
Стандартная библиотека не имеет функции со знанием пользовательского типа Student_info
,
Так как Student_info
является определяемым пользователем типом, и оператор istream должен его перегрузить, чтобы знать, как обрабатывать Student_info
параметр.
Подумайте о перегрузке операторов математическими операторами и примените то же самое.
Он использует & потому что он хочет вернуть его как ссылку на уже созданный, чтобы не было ненужных операций копирования.