Перегрузка оператора << c++

программирование C++ ООП

Есть класс TreeClass для работы с деревьями:
class TreeS {
Node *TreeW;
public:
void AddNode(int, Node *&Tree);
void Print(Node *&Tree) const;
TreeS() { TreeW = NULL; };
};

По заданию надо перегрузить оператор << следующим образом:
TreeS& operator<<(const Node *&Tree);//добавить узел влево
Как это правильно сделать и как мне правильно вызывать этот оператор? Никаких идей. В интернете все примеры только на ostream

Примечание:
int это значение ключа в узле. Я заполняю дерево циклом вроде:
for (int i = 0; i<=x; i++) Object.AddNode(i,Object.TreeW);

Примечание:
@PetSerAl: я не совсем понимаю как должен работать оператор, но предположительно как я себе это представляю: у меня есть какой-то созданный узел вида
TreeS SingleNode;
SingleNode.AddNode(99,SingleNode.TreeW);
и после этого я добавляю этот узел в левое поддерево уже созданного дерева. Я представляю себе это так
OldTree<<SingleNode;
Но эта строка в корне неправильна, т.к. вылетает куча ошибок связанных с несоответствием с ostream и т.д.

Примечание:
@PetSerAl: я же вам вроде писал что я не совсем представляю как он должен работать. Может быть вы покажете?

Примечание:
@PetSerAl: Спасибо за пример. Забыл добавить структуру. Вот она:
struct Node {
int number;
Node *left, *right;
};
Можете теперь показать как должен выглядеть перегруженный оператор?

Примечание:
@PetSerAl: Еще раз спасибо. Теперь почти понял, но запутался в некоторых моментах:
1) Могу ли я использовать в перегруженном операторе this? И если да, то получается что это будет ссылка на объект который вызывает данный оператор? То есть если я напишу OldTree<<newNode, то this будет ссылкой на OldTree?
2) Оператор обязательно должен возвращать? Как я себе это представляю, то должно должно быть void operator<<(const Node *&Tree). Можете прояснить здесь?
Ответы:
А как тогда Вы предполагаете добавлять только узел, без ключа?
У Вас оператор должен добавлять Node*, а Вы ему подсовываете TreeS.
Проблема в том, что я не знаю, ЧТО должен сделать Ваш оператор, поэтому и не могу сказать КАК он может это сделать. Если добавление узла в дерево требует наличие ключа, то совершенно непонятно, ЧТО надо сделать, чтобы добавить узел без такого ключа.
2 Примечание №5
1) Зависит от того как определён оператор. Если он член класса, то this будет указателем на левый операнд в бинарных операторах. Если он не член класса, то никакого this не будет.
2) Насколько я помню C++, можно ничего не возвращать. Но Вы же сами в вопросе написали, что Вам нужно перегрузить TreeS& operator<<(const Node *&Tree). Видимо, это нужно, чтобы можно было писать так: OldTree<<newNode1<<newNode2<<newNode3.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.