I am trying to overload the Assignment and Copy operators for a simple linked list class. It seems I can only copy the pointers, when I delete the original list, my program has errors.
Here's the code:
#include <iostream>
using namespace std;
struct link
{
int data;
link* next;
};
class linklist
{
private:
link* first;
public:
linklist()
{ first = NULL; }
linklist(linklist& a)
{ *this = a; }
~linklist()
{
link* current = first;
while(current != NULL)
{
link* temp = current;
current = current->next;
delete temp;
}
}
void additem(int d)
{
link* newlink = new link;
newlink->data = d;
newlink->next = first;
first = newlink;
}
void display()
{
link* current = first;
while(current != NULL)
{
cout << endl << current->data;
current = current->next;
}
}
void deleteitem()
{
link* temp = first->next;
delete first;
first = temp;
}
linklist& operator = (linklist &a)
{
if(this==&a)
return *this;
while(first!=NULL)
deleteitem();
link* current = a.first;
while(current!=NULL)
{
additem(current->data);
current=current->next;
}
first = current;
return *this;
}
};
int main()
{
linklist* li = new linklist;
li->additem(25);
li->additem(36);
li->additem(49);
li->additem(64);
li->display();
linklist* lj = li;
//lj = li;
delete li;
cout << endl << endl;
lj->display();
cout << endl;
return 0;
}
Here's the code:
#include <iostream>
using namespace std;
struct link
{
int data;
link* next;
};
class linklist
{
private:
link* first;
public:
linklist()
{ first = NULL; }
linklist(linklist& a)
{ *this = a; }
~linklist()
{
link* current = first;
while(current != NULL)
{
link* temp = current;
current = current->next;
delete temp;
}
}
void additem(int d)
{
link* newlink = new link;
newlink->data = d;
newlink->next = first;
first = newlink;
}
void display()
{
link* current = first;
while(current != NULL)
{
cout << endl << current->data;
current = current->next;
}
}
void deleteitem()
{
link* temp = first->next;
delete first;
first = temp;
}
linklist& operator = (linklist &a)
{
if(this==&a)
return *this;
while(first!=NULL)
deleteitem();
link* current = a.first;
while(current!=NULL)
{
additem(current->data);
current=current->next;
}
first = current;
return *this;
}
};
int main()
{
linklist* li = new linklist;
li->additem(25);
li->additem(36);
li->additem(49);
li->additem(64);
li->display();
linklist* lj = li;
//lj = li;
delete li;
cout << endl << endl;
lj->display();
cout << endl;
return 0;
}