复制List类的构造函数,而不使用实现中的任何方法

时间:2017-03-01 06:11:29

标签: c++ constructor

我正在为List类编写一个复制构造函数,其要求是不要在实现中使用任何其他方法。

类片段如下:

class List {
     private:
     struct Node {
            NodeData *data;
            Node *next;
           };
           Node *head;
 }; 

要求是为此类编写复制构造函数,除了我们可以使用NodeData类的复制构造函数

之外,不要在实现中使用任何其他方法

我编写了如下复制构造函数:

list::list(const list &t){
  Node* q;
  q=new Node;
  while (p!=NULL){
    q->x= p->x;}
}

这不起作用,请帮助您了解如何根据需要编写复制构造函数。

1 个答案:

答案 0 :(得分:0)

我不赞同评论家说这是一个愚蠢的练习,实际上尝试这样做很有意思。以下内容应该让您了解要尝试的内容:http://ideone.com/DdC7bN

class List {
private:
    struct Node {
        int data; // simplification
        Node *next;

        Node(int d) {
            data = d;
            next = NULL;
        }
    };

protected:
    Node *head;
    Node *tail;

  public:  
    List(int d) : head(new Node(d)), tail(head) {}

    void append(int d) {
        Node* n = new Node(d);
        tail->next = n;
        tail = n;
    }

    List(const List& rhs) {
        if (head) delete head;

        head=new Node(rhs.head->data);

        Node* lhsCurrent = head;
        Node* rhsCurrent = rhs.head->next;
        do {
            lhsCurrent->next = new Node(rhsCurrent->data);  

            rhsCurrent = rhsCurrent->next;
            lhsCurrent = lhsCurrent->next;                  
        } while (rhsCurrent!=NULL);

        tail = lhsCurrent;
    }
 }; 

int main() {
    List first(5);
    first.append(6);

    List second(first);
    return 0;
}