1

我想要做的是有一个带有默认构造函数、复制构造函数、复制赋值构造函数和析构函数的单链表类。我几乎没有开始它,因为我很困惑是否 a Nodewith int data 和 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:
    struct Node {
        data x;
        Node *next;
    }_list;
}
4

4 回答 4

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;
}
于 2012-10-24T21:25:19.470 回答
0

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

于 2012-10-24T21:30:11.507 回答
0

如果“单独的类”是指不嵌套在list 中,那么不,最好将它嵌套(和私有)。但这并不意味着你不能给它构造函数、析构函数、操作符、方法等(即把它变成一个成熟的类)。

于 2012-10-24T21:27:23.077 回答
0

拥有一个内部类很好,但是,如果/当您为内部类实现诸如构造函数之类的方法时,则范围解析运算符需要包含外部类和内部类名称。例如,

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

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

于 2012-10-25T00:14:43.280 回答