#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 по ссылке после завершения функции» — Это почти наверняка так. Но, чтобы было ясно, вы не можете сказать это, глядя только на прототип, это то, что вы вывели из обычной практики.