operator<<
Попробовал перегрузить правильным, с моей точки зрения, способом:
"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-м случае я, получается, создал не функцию класса, а обычную функцию.Как сделать правильно?
Как правильно перегружать оператор<<?
Попробовал перегрузить правильным, с моей точки зрения, способом:
"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.
И тебе не кажется странным, что в объявлении метода ты пишешь один параметр, а в реализации два?
Попробуй разобраться, что значит слово friend.
И тебе не кажется странным, что в объявлении метода ты пишешь один параметр, а в реализации два?
У меня и там, и там два параметра
ostream& и CNodes&.
У меня и там, и там два параметра
ostream& и CNodes&.
Ты объявил не ф-цию член, а глобальную ф-цию, вот он и матюгается. А если объявлять член - нужен 1 параметр - острим, и френд убрать, и ртфм ртфм ртфм.
У меня и там, и там два параметра
ostream& и CNodes&.
В данном случае ты перегружаешь оператор не для CNodes, а для ostream. К примеру, cout << n можно расписать как cout.operator<<(n), но поскольку добавить функцию-член к классу ostream мы не можем, то вместо этого используем глобальную функцию, первым параметром которой является ссылка на объект, метод для которого мы перегружаем. Ссылка, которую возвращает оператор, используется для того, чтобы можно было написать cout << n << m; В случае, если бы мы перегружали оператор для CNodes, пришлось бы писать n << cout. (ещё забавнее выгдядело бы n << m << cout)