![]() |
|
Модераторы: bsa |
![]()
|
|
| hoz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Я приступил к изучению С++ после Си. Там всё писал функциями и всё последовательно. Здесь же сразу бросились в глаза некоторые моменты, которые мне вообще не понятны, при прочтении книги Джесс Либерти. Освой самостоятельно С++ за 21 день.
1. Данные операторы перенаправления потока являются операторами командной строки или языка С++ ? 2. В книге есть такой пример:
Я б изначально как обычно прочитал бы код последовательно. Записать x + y в cout. А дальше " " записаться должно в x + y; и т.д. Но Ответ верный такой: Выводится сумма и произведение переменных x и y и между ними пробел. Код читается компилятором слева направо что-ли? Дело в том, что я б написал его так:
Так, всё было бы логично, и последовательно. А в книге, приведён вариант, который выше я написал. Почему так? |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В С++ можно переопределять стандартные операторы. В частности, есть перегрузка оператора << для объектов класса ostream. В итоге cout << A << B << C превращается в operator<<(operator<<(operator<<(cout, A), B), C). Так как объявление этого оператора имеет вид: ostream& operator<<(ostream& stream, Type value). Т.е. он возвращает ссылку на объект потока, в итоге следущий оператор тоже применяется к потоку и т.д.
Добавлено через 3 минуты и 54 секунды Кстати, при изучении с++ рекомендуется забыть си. Потому что в с++ используются другие подходы к программированию, а знание си сильно усложняет восприимчивость нового. Особенно, когда оно "противоречит" логике (на самом деле не противоречит, просто логика другого порядка). |
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Вы сделали такой вывод т.к. знаете как работает библиотека iostream ? Изучали её? В книгах по этому поводу вообще ничего особо нет. Хотя в примерах повсеместно в тех же книгах и на просторах интернета используется... Странно.. |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну да. Всё это в достаточной степени стандартизировано и называется стандартной библиотекой (то есть эта библиотека как таковая не является частью языка, но она очень удобна). См. здесь, например. Наверняка в каких либо главах описываются операторы ввода-вывода << и >>. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
hoz, довольно сложно автору книги объяснить все внутренности языка, которые используются при написании простейшей программы Hello, world! Если он это начнет делать, то читатель выкинет эту книгу. Поэтому, обычно, авторы не углубляются на первых страницах.
Чтобы ты ощутил всю глубину проблемы, то объявление класса выглядит так:
|
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Потому что оператор << , как и все операторы в С++, с чем-то взаимодействует.
Здесь ты как бы видишь пример аналогии интерфейса, позволяющего осуществлять взаимодействие с некоторыми объектами. А у объектов есть свои свойства, от которых никуда не деться. В данном случае происходит вывод на стандартное устройство (вывода). Который работает по принципу FIFO (первым пришёл - первым ушёл). Если бы производилась с помощью этого оператора запись в стек, который действует по принципу LIFO (последним пришёл - первым ушёл), то обратная последовательность была бы вполне к месту. Здесь оператор "<<" никоим образом не относится к порядку передачи данных из объекта в объект, а показывает к какому объекту данные от какого движутся. А дальше уже вступают в силу свойства самих объектов. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |