单独的链表列表与构造函数

时间:2012-10-24 21:21:15

标签: c++

我想要做的是拥有一个带有默认构造函数,复制构造函数,复制赋值构造函数和析构函数的单链表。我几乎没有启动它,因为如果带有int数据的Node和下一个指针应该是一个单独的类或我的方式,我很困惑。

class list {
public:
    list(): next(NULL) {} // default constructor                                   
    list(const list &t){} // copy constructor                                     
    list&   operator= (const list &t) // assignment operator                        
    ~list(){} //destructor                                                        
    void print()    

private:
    struct Node {
        data x;
        Node *next;
    }_list;
}

4 个答案:

答案 0 :(得分:2)

从逻辑上讲,节点是一个单独的结构(类),但在通常的实现中,列表本身由第一个节点表示。

所以,基本上,你不会有一个list类(如果你这样做,它只需要一个指向第一个节点+构造函数/赋值运算符/析构函数的指针):

struct Node {
  data x;
  Node *next;
};

class list{
 public:
  list(): next(NULL) {} // default constructor                                   
  list(const list &t){} // copy constructor                                     
  list& operator= (const list &t) // assignment operator                        
  ~list(){} //destructor                                                        
  void print() ;

 private:
  Node* first;
}

答案 1 :(得分:0)

如果通过“单独的类”表示没有嵌套在 list 中,那么不,它最好是嵌套(和私有)。但这并不意味着你不能给它构造函数,析构函数,运算符,方法等(即把它变成一个完整的类)。

答案 2 :(得分:0)

这完全有效。如果仅在Node中使用list,则只是一个实现细节。但是,如果您需要Node之外的list,例如在iterator类中,您需要在list之外实现它。

答案 3 :(得分:0)

有一个内部类很好,但是,如果/当你实现像内部类的构造函数这样的方法时,范围解析运算符需要包含外部和内部类名。例如,

List::Node::Node(const DataType& nodeData, Node* nextPtr) {stuff}

通过在List类的私有部分中声明Node类,您将提供针对外部访问的封装,但仍允许List类具有访问权限。