链表 c++ 节点构造函数



我得到了这段代码来操作链表,但在我开始之前,有一些事情我不明白。首先,我认为默认构造函数是由程序本身在没有编写构造函数时创建的。这里有一条注释,说"默认构造函数创建一个空列表"旁边是一个书面构造函数。我也不明白为什么旁边有一组方括号......{ head = 空; }

但最重要的是我不明白这行代码... friend ostream& operator<<( ostream& os, const LinkedList &ll (;

这是做什么的?

#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 )
     {
     for (Node *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;}

首先,我认为默认构造函数是由程序本身在没有编写构造函数时创建的。

default constructor是可以在没有参数的情况下调用的。因此,在本例中,我们有一个用户定义的默认构造函数。这是完全有效的。

但最重要的是我不明白这行代码...

friend ostream& operator<<( ostream& os, const LinkedList &ll ); 类中的这段代码允许operator<<成为它的朋友。 当函数需要访问类的protectedprivate成员时,将使用Friend方法。

由于headLinkedList的私有成员,friend 关键字用于允许输出运算符<<访问它。在这种情况下,运算符 << 允许您编写类以输出数据流,最明显的是 std::cout .举个例子:

LinkedList list;
std::cout << list << std::endl;

首先,我认为默认构造函数是由程序本身在没有编写构造函数时创建的。

好吧,默认构造函数是可以在没有参数的情况下调用的任何构造函数。但是编译器确实会生成默认的默认构造函数,并且默认初始化(uff!(所有成员。但是head是一个没有默认初始化的指针。如果没有head = NULL,它的价值将是不确定的。不过,更好的方法是:

LinkedList() : head(NULL) {}

但最重要的是我不明白这行代码...friend ostream& operator<<( ostream& os, const LinkedList &ll (;

它在全局范围内(类外部(定义运算符<<,这也是类的友元。同样可以做到:

class LinkedList
{
friend ostream& operator<<( ostream& os, const LinkedList &ll );
};
ostream& operator<<( ostream& os, const LinkedList &ll )
{
    …
}

然后,在将数据发送到输出流(从std::ostream派生(时,约定使用此运算符,如下所示:

LinkedList list;
cout << list << endl; // Dumps the list to standard output

按照这个约定,这个运算符返回的引用与它的第一个参数(ostream&(相同,以便它可以如上所示进行链式链接;第一个运算符调用(cout << list(的返回值用作第二个运算符调用([returned value] << endl(的第一个参数。

相关内容

  • 没有找到相关文章

最新更新