Перегруженный оператор ввода

#c #input #operator-overloading

#c #ввод #оператор-перегрузка

Вопрос:

У меня есть прототип функции для оператора ввода, но я не уверен, что они все из себя представляют и что они означают, я думаю, что istream — это объект типа stream, а sourceFileStream передается по ссылке. Может кто-нибудь объяснить, что означает каждый из параметров?

 istreamamp; operator >>(istream amp;sourceFileStream, Chart amp;aChart)
  

Ответ №1:

istream — это входной поток:http://www.cplusplus.com/reference/iostream/istream /

Оба sourceFileStream и aChart передаются по ссылке.

Ответ №2:

istreamamp; это возвращаемый тип, он возвращает sourceFileStream параметр по ссылке после завершения функции.

Это сделано для того, чтобы вы могли объединять операторы в цепочку (использовать их несколько раз в одном и том же операторе).

Бьюсь об заклад, вы были бы лучше знакомы с операторами вывода цепочки … так, например, вы можете использовать оператор << много раз в этой строке:

 int x;
std::cerr << std::hex << x << std::endl;
  

потому что он возвращает ссылку на поток (cerr), которым он манипулирует.

istreamamp; sourceFileStream в качестве параметра используется входной поток (чтение файла или что-то в этом роде). Он передается по ссылке, поэтому вы изменяете поток, который передается, а затем возвращаете его по причине, указанной выше (скорее всего, изменяя его путем чтения вперед при чтении и перемещая его внутренние указатели).

Вы также передаете объект диаграммы по ссылке, скорее всего, для заполнения его внутренних элементов данных из содержимого потока. Итак, в конце использования этого оператора элементы вашей диаграммы будут заполнены из содержимого потока, как вы указываете в определении этой функции. PS: по ссылке означает, что объект, переданный в эту функцию, будет изменен напрямую, поскольку aChart будет псевдонимом для этого объекта. Если бы это было не по ссылке, копия этого объекта была бы изменена, и эта функция была бы бесполезна.

Комментарии:

1. «он возвращает параметр sourceFileStream по ссылке после завершения функции» — Это почти наверняка так. Но, чтобы было ясно, вы не можете сказать это, глядя только на прототип, это то, что вы вывели из обычной практики.