Назначение ссылки на определенную функцию

Я прохожу ускоренный 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);
}

Может кто-нибудь объяснить, почему мы будем это делать? Это только по педагогическим причинам, чтобы показать, что мы можем? Заранее спасибо.

1

Решение

что я действительно не понимаю, почему автор использует & переопределить функцию, уже принадлежащую классу std

Он не переопределяет функцию.

Он создает новую функцию под названием read, который возвращает istream&,

Тот факт, что он возвращает ссылку, является условным (соответствует эквивалентному поведению стандартных библиотечных функций), но имеет мало общего с тем, что он определяет функцию в первую очередь.

Стандартная библиотека не имеет функции со знанием пользовательского типа Student_info,

4

Другие решения

Так как Student_info является определяемым пользователем типом, и оператор istream должен его перегрузить, чтобы знать, как обрабатывать Student_info параметр.

Подумайте о перегрузке операторов математическими операторами и примените то же самое.

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

0