Система I/O языка C++
От: dirtez  
Дата: 26.02.12 19:45
Оценка:
В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты? Ну это так, философия, теперь конкретный вопрос.

При перегрузке операторов << или >> по отношению к объектам cin, cout пишут, мол пусть функция возвращает ссылку на принятый поток (операнд слева). Я понимаю что вызывает операторную функцию левый операнд оператора, но куда возвращает функция ссылку на поток, и зачем это делать (вроде как не обязательно, ну совет же всё таки)?
ostream &operator << (ostream &stream, ThreeD ob)
{
    stream << ob.x << ", " << ob.y << ", " << ob.z;

    return stream;
}
Re: Система I/O языка C++
От: Michaels1  
Дата: 26.02.12 19:51
Оценка: 3 (1) +1
Здравствуйте, dirtez, Вы писали:

D>В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты? Ну это так, философия, теперь конкретный вопрос.


для логов, формирования строк, преобразования int/float/... в string, текстовых и не только файлов

D>При перегрузке операторов << или >> по отношению к объектам cin, cout пишут, мол пусть функция возвращает ссылку на принятый поток (операнд слева). Я понимаю что вызывает операторную функцию левый операнд оператора, но куда возвращает функция ссылку на поток, и зачем это делать (вроде как не обязательно, ну совет же всё таки)?


нужно чтобы цепочку из этих операторов можно было строить. Т.е.,

(a << "hello") << "world"

т.к. выражение в скобках возвращает ссылку на объект потока, в этот объект можно "вывести" слово "world"
Re: Система I/O языка C++
От: LaptevVV Россия  
Дата: 26.02.12 19:54
Оценка:
Здравствуйте, dirtez, Вы писали:

D>В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты? Ну это так, философия, теперь конкретный вопрос.

Консольный ввод-вывод используется редко. Но мне вот — нужно, у меня не гуёвые приложения.
А работа с бинарными файлами — вполне на этом API можно базу данных реализовать. И реализуют...
D>При перегрузке операторов << или >> по отношению к объектам cin, cout пишут, мол пусть функция возвращает ссылку на принятый поток (операнд слева). Я понимаю что вызывает операторную функцию левый операнд оператора, но куда возвращает функция ссылку на поток, и зачем это делать (вроде как не обязательно, ну совет же всё таки)?
D>
D>ostream &operator << (ostream &stream, ThreeD ob)
D>{
D>    stream << ob.x << ", " << ob.y << ", " << ob.z;
D>    return stream;
D>}
D>

Ссылка возвращается для того, чтобы можно было писать многократные аргументы/
Как в стандартный консольный поток:
cout << a << d << endl;
Попробуй без возврата ссылки посмотреть, что получится.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Система I/O языка C++
От: niralex  
Дата: 26.02.12 20:04
Оценка:
Здравствуйте, dirtez, Вы писали:

D>В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты? Ну это так, философия, теперь конкретный вопрос.


D>При перегрузке операторов << или >> по отношению к объектам cin, cout пишут, мол пусть функция возвращает ссылку на принятый поток (операнд слева). Я понимаю что вызывает операторную функцию левый операнд оператора, но куда возвращает функция ссылку на поток, и зачем это делать (вроде как не обязательно, ну совет же всё таки)?

D>
D>ostream &operator << (ostream &stream, ThreeD ob)
D>{
D>    stream << ob.x << ", " << ob.y << ", " << ob.z;

D>    return stream;
D>}
D>


чтобы можно было бы делать множественный вывод, например:
cout << Ob1 << Ob2;
Re: Система I/O языка C++
От: zaufi Земля  
Дата: 26.02.12 20:50
Оценка: 3 (1) +1
Здравствуйте, dirtez, Вы писали:

D>В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты?


ну с помощью стримов много чего делается а не только вывод в консоль... и местами это даже удобно! сериализация, сетевой I/O (boost::asio), boost::iostream "прозрачно" может делать (де)архивацию данных "по дороге" и всякие прочие феньки "на лету"... так что не логами и файлами едиными...
Re: Система I/O языка C++
От: Кодт Россия  
Дата: 27.02.12 09:26
Оценка:
Здравствуйте, dirtez, Вы писали:

D>В книге аж целая глава написана про неё. Разве кто-то будет использовать её углублённо? Ведь используя средства ОС + GUI его она вовсе не пригодится, разве что писать системное приложение без GUI, всё равно, зачем там всякие навороты? Ну это так, философия, теперь конкретный вопрос.


Эта философия называется у-вэй (1) (2).
В никсах даже видеопроигрыватели — это лишь фронтэнд к вполне себе консольному mplayer/mencoder.

D>При перегрузке операторов << или >> по отношению к объектам cin, cout пишут, мол пусть функция возвращает ссылку на принятый поток (операнд слева). Я понимаю что вызывает операторную функцию левый операнд оператора, но куда возвращает функция ссылку на поток, и зачем это делать (вроде как не обязательно, ну совет же всё таки)?


Расставь скобки в твоём же примере, и поймёшь куда она её возвращает:
D>
D>ostream &operator << (ostream &stream, ThreeD ob)
D>{
D>    ((((stream << ob.x) << ", ") << ob.y) << ", ") << ob.z;
D>    return stream;
D>}
D>
Перекуём баги на фичи!
Re: Система I/O языка C++
От: MasterZiv СССР  
Дата: 28.02.12 09:34
Оценка: 3 (1)
> В книге аж целая глава написана про неё. Разве кто-то будет использовать её
> углублённо?

Вообще замечание правильное, в общем, эту подсистему сделали больше по приколу,
чем по необходимости. И применение у неё достаточно ограниченное.

Единственное, что лучше в IO С++ относительно IO С -- это типобезопасность.
IO С++ наверное почти невозможно убить данными не того типа или не тем форматом.
В С -- запросто.

В общем, для применнеия в учебных задачах она незаменима -- она тупа и проста,
если хочешь от неё тупого и простого.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.