【发布时间】:2015-01-30 05:41:21
【问题描述】:
我已经使用模板类实现了一个单链表,并尝试创建一个工作副本构造函数。当调用复制构造函数时,它会准确地复制列表。但是,它会从原始节点中删除节点。
这是类的实现、构造函数和析构函数:
template<class L>
class LinkedList
{
public:
LinkedList();
LinkedList(const LinkedList<L> &og);
~LinkedList();
Node<L>* AddToEnd(L object);
Node<L>* AddToMiddle(L object);
Node<L>* DeleteNode(L deleteItem);
Node<L>* ReverseList();
void Display();
int Size();
private:
Node<L>* head;
Node<L>* tail;
int size;
};
template<class L>
LinkedList<L>::LinkedList()
{
head = NULL;
tail = NULL;
size = 0;
}
template<class L>
LinkedList<L>::LinkedList(const LinkedList<L> &og)
{
cout << "\nCopy constructor has been called.\n\n";
head = new Node<L>;
*head = *og.head;
tail = new Node<L>;
*tail = *og.tail;
size = og.size;
}
template<class L>
LinkedList<L>::~LinkedList()
{
delete head;
delete tail;
}
还有main.cpp:
#include "Header.h"
int main()
{
int int1 = 1;
int int2 = 2;
int int3 = 3;
int int4 = 4;
int int5 = 5;
cout << "Creating the first integer list..." << endl;
LinkedList<int> intList1;
intList1.AddToEnd(int1);
intList1.AddToEnd(int2);
intList1.AddToEnd(int3);
intList1.AddToEnd(int4);
intList1.AddToEnd(int5);
intList1.Display();
cout << endl << "Cloning and reversing..." << endl;
LinkedList<int> intList2(intList1);
intList2.ReverseList();
cout << "Original list: " << endl;
intList1.Display();
cout << "Reversed list: " << endl;
intList2.Display();
return 0;
}
输出如下:
正在创建第一个整数列表... 1 2 3 4 5
克隆和反转...
复制构造函数已被调用。
原名单: 1 2 1 反转列表: 5 4 3 2 1
【问题讨论】:
标签: c++ class templates constructor linked-list