Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

operator<<

390
08 апреля 2006 года
lexus
143 / / 13.04.2004
Как правильно перегружать оператор<<?
Попробовал перегрузить правильным, с моей точки зрения, способом:
"node.h"
class CNodes{
....
public:
friend ostream& operator<<(ostream&,CNodes&);
...
}
"node.cpp"
ostream& CNodes::operator<<(ostream& output,CNodes& Nodes){
...
}
выдало:
error C2039: '<<' : is not a member of 'CNodes'

Попробовал так:
"node.cpp"
ostream& operator<<(ostream& output,CNodes& Nodes){
...
}
Заработало
Но во 2-м случае я, получается, создал не функцию класса, а обычную функцию.Как сделать правильно?
3
09 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by lexus
Как правильно перегружать оператор<<?
Попробовал перегрузить правильным, с моей точки зрения, способом:
"node.h"
class CNodes{
....
public:
friend ostream& operator<<(ostream&,CNodes&);
...
}
"node.cpp"
ostream& CNodes::operator<<(ostream& output,CNodes& Nodes){
...
}
выдало:
error C2039: '<<' : is not a member of 'CNodes'

Попробовал так:
"node.cpp"
ostream& operator<<(ostream& output,CNodes& Nodes){
...
}
Заработало
Но во 2-м случае я, получается, создал не функцию класса, а обычную функцию.Как сделать правильно?


Попробуй разобраться, что значит слово friend.
И тебе не кажется странным, что в объявлении метода ты пишешь один параметр, а в реализации два?

390
09 апреля 2006 года
lexus
143 / / 13.04.2004
Цитата:
Originally posted by Green
Попробуй разобраться, что значит слово friend.
И тебе не кажется странным, что в объявлении метода ты пишешь один параметр, а в реализации два?


У меня и там, и там два параметра
ostream& и CNodes&.

398
09 апреля 2006 года
Alexandoros
630 / / 21.10.2005
Цитата:
Originally posted by lexus
У меня и там, и там два параметра
ostream& и CNodes&.



Ты объявил не ф-цию член, а глобальную ф-цию, вот он и матюгается. А если объявлять член - нужен 1 параметр - острим, и френд убрать, и ртфм ртфм ртфм.

534
10 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by lexus
У меня и там, и там два параметра
ostream& и CNodes&.

В данном случае ты перегружаешь оператор не для CNodes, а для ostream. К примеру, cout << n можно расписать как cout.operator<<(n), но поскольку добавить функцию-член к классу ostream мы не можем, то вместо этого используем глобальную функцию, первым параметром которой является ссылка на объект, метод для которого мы перегружаем. Ссылка, которую возвращает оператор, используется для того, чтобы можно было написать cout << n << m; В случае, если бы мы перегружали оператор для CNodes, пришлось бы писать n << cout. (ещё забавнее выгдядело бы n << m << cout)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог