Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
АТерентьев
21 / 20 / 1
Регистрация: 16.10.2009
Сообщений: 947
#1

Перегрузка << - C++

18.06.2010, 20:34. Просмотров 514. Ответов 3
Метки нет (Все метки)

Заинтересовала конструкция , использованная как перегрузка оператора "<<" для вывода записей, состоящих из трех строковых полей:

C++
1
2
3
4
5
6
7
ostream &operator<<(ostream &stream, address &ob)
{
  cout << ob.name<<endl;
  cout << ob.street<<endl;
  cout << ob.street<<endl;
  return stream;
}
Если теперь addr - это указанный тип записи, то одной командой можно вывести все три строковых поля :

C++
1
2
3
address addr;
...
cout<<addr;
то

Я полагал , что команда (в реализации перегрузки "<<")

C++
1
 cout << ob.name<<endl;
просто выводит строковую переменную на экран, но оказывается, что она "перехватывает"
stream и возвращает его командой
C++
1
return stream
.

Был очень благодарен, если кто-то прокомментировал этот факт.
Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2010, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка << (C++):

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

Перегрузка в c++ - C++
Собственно для чего нужна перегрузка функций или операторов ?

перегрузка >> и << - C++
Решил попробовать перегрузить операции ввода и вывода,почему то выводятся 0, вместо нужных значений,подскажите в чем косяк #include...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
18.06.2010, 20:53 #2
Приведенный код содержит ошибку. Правильно должно быть так:
C++
1
2
3
4
5
6
7
ostream &operator<<(ostream &stream, address &ob)
{
  stream << ob.name << endl;
  stream << ob.street << endl;
  stream << ob.street << endl;
  return stream;
}
1
АТерентьев
21 / 20 / 1
Регистрация: 16.10.2009
Сообщений: 947
18.06.2010, 21:54  [ТС] #3
Спасибо! Так оно понятно - ошибка в учебнике.
0
Nick Alte
Эксперт С++
1638 / 1010 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
18.06.2010, 22:39 #4
Операция << имеет всего два операнда. Так что если мы хотим писать цепочку вида cout << var1 << var2 << var3; , да ещё и чтобы значения разного типа туда кидать, то надо учитывать, что она разбивается на последовательность операций таким образом: ((сout << var1) << var2) << var3;
Значит, выражение в скобках должно иметь такой тип, чтобы к нему была применима операция << и к тому же чтобы она имела тот же смысл, что и для ostream. Некий кэп подсказывает нам, что проще всего возвращать из операции << тот же самый объект, что занимается выводом, а точнее - ссылку на него. Тогда к этому результату можно прицеплять дальнейшие операции, применимые к этому объекту, которые в свою очередь вернут его же, чтобы можно было прицепить ещё одну операцию и так далее ad infinitum.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2010, 22:39
Привет! Вот еще темы с ответами:

Перегрузка ++ и -- - C++
У меня было задание: Напишите программу работы со временем, в которой используются перегруженные операции ++ и --, которые работают в...

Перегрузка << и >> - C++
помогите сделать так чтобы &lt;&lt; и &gt;&gt; в int main() работали... Printers.h class Printers { public: ...

Перегрузка в c++ - C++
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии

перегрузка [] - C++
Здарова никак не могу перегрузить имеется класс Int2 моделирующий int я перегрузил rvalue тоесть при вызове int a; Int2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2010, 22:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru