我正在为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;}
}
这不起作用,请帮助您了解如何根据需要编写复制构造函数。
答案 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;
}