2015-02-18 2 views
0

Мне было дано следующее заявление моего профессора, и у меня есть пара функций, которые мне нужно написать на основе этого объявления LinkedList, но я застрял в определении того, что делает пара строк кода. я понимаю все в значительной степени до этих строк;может кто-нибудь объяснить, что делает эта строка кода? Речь идет о связанных списках

friend ostream& operator<<(ostream& os, const LinkedList &ll) 
{ 
LinkedList::Node *current; 
for (current = ll.head; current != NULL; current = current->next) 
os << current->data << " "; 
return os; 
} 

вот полный код.

#include <iostream> 
#include <cstdlib> 
using namespace std; 
class LinkedList 
{ 
public: 
LinkedList() { head = NULL; } // default constructor makes an empty list 
// functions to aid in debugging 
// ----------------------------- 
friend ostream& operator<<(ostream& os, const LinkedList &ll); 
void insertHead(int item); 
private: 
class Node // inner class for a linked list node 
{ 
public: 
Node(int item, Node *n) // constructor 
int data; // the data item in a node 
Node *next; // a pointer to the next node in the list 
}; 
Node *head; // the head of the list 
}; 
friend ostream& operator<<(ostream& os, const LinkedList &ll) 
{ 
LinkedList::Node *current; 
for (current = ll.head; current != NULL; current = current->next) 
os << current->data << " "; 
return os; 
} 
void LinkedList::insertHead(int item) // insert at head of list 
{ 
head = new Node(item, head); 
} 
LinkedList::Node::Node(int item, Node *n) {Node::data = item; next = n;} 

пс. может кто-то также объяснить, что делает оператор содружества, потому что я никогда не использовал его раньше?

+0

[Google] (http://www.google.com/) является вашим другом! – 0x499602D2

ответ

3

Линия

friend ostream& operator<<(ostream& os, const LinkedList &ll) 

перегружает "вставки оператора", так что вы можете отобразить список, используя общий C++ синтаксис:

std::cout << mylist; 

Линия выше эквивалентно:

operator<<(std::cout, mylist) 

Первый аргумент имеет тип std::ostream, а второй тип LikedList.

Оператор должен быть другом, поскольку он (возможно) нуждается в доступе к частным/защищенным членам.

См. this для получения дополнительной информации о перегрузке оператора.

+0

@zeDante И для другой части кода, о котором идет речь, вы можете прочитать, как работает цикл 'for'. См. [Эту страницу] (http://www.cprogramming.com/tutorial/c/lesson3.html) для получения некоторой информации по этому вопросу. Я оставлю часть связанного списка этой строки кода, поскольку объект класса является связанным списком. – Steve

+0

спасибо, много, это действительно делает больше смысла. один последний вопрос только для пояснения, сделайте строку os < data << "" способ сказать 'cout' – zeDante

+0

yes, 'os' представляет входной поток функции, переданный по ссылке. Поэтому, когда вы говорите 'cout << my_list',' cout' передается 'operator <<' в качестве первого аргумента. Внутри функции она называется 'os'. Также обратите внимание, что не обязательно использовать 'cout', вы также можете использовать файл' out_file << my_list', и контент будет отправлен в файл, так как последний также является «ostream». Это красота использования наследования и написания функции, которая работает для базы хорошо спроектированной иерархии. – vsoftco