\\\
#include<iostream>
using namespace std;
template<typename T> class List;
template<typename T> class Node{
T data;
Node<T> *link;
public:
Node();
Node(int a);
friend class List<T>;
};
template<typename T> Node<T>::Node(){
data=0;
link=NULL;
}
template<typename T> Node<T>::Node(int a){
data=a;
link=NULL;
}
template<typename T> class List{
Node<T> *head,*tail;
public:
List();
~List();
List & operator =(const List<T>& l);
List<T>& operator+=(Node<T>& n);
List<T>& operator+=(const List<T>& l);
List<T> operator+( List<T>& l);
void Printlist();
};
template<typename T> List<T>::List(){
head=new Node<T>;
tail=head;
}
template<typename T> List<T>::~List(){
Node<T> *p=head,*q;
while(p!=NULL){
q=p->link;
delete p;
head=q;
p=q;
}
}
template<typename T> List<T> & List<T>::operator=(const List<T> & l){
Node<T> *p=l.head->link,*q=head,*q2;
while(p!=NULL){
if(q->link!=NULL) q->link->data=p->data;
else {q2=new Node<T>(p->data);
q->link=q2;
tail=q2;
}
p=p->link;
q=q->link;
}
return *this;
}
template<typename T> List<T> & List<T>::operator+=(Node<T>& n){
tail->link=&n;
tail=&n;
return *this;
}
template<typename T> void List<T>::Printlist(){
Node<T> *p=head->link;
while(p!=NULL){
cout<<p->data<<' ';
p=p->link;
}
cout<<endl;
}
template< typename T> List<T>& List<T>::operator+=(const List<T>& l){//redifinition of "+="
Node<T> *p=tail,*q=l.head->link,*p2;
while(q!=NULL){
p2=new Node<T>(q->data);
p->link=p2;
tail=p2;
p=tail;
q=q->link;
}
return *this;
}
template<typename T> List<T> List<T>::operator+( List<T>& l){//"+"
List<T> p;
p=*this;
p+=l;
return p;
}
int main(){
List<int> A,B;
int i=0;
while(i<5){
Node<int> *p,*q;
p=new Node<int>(2*i+1);
q=new Node<int>(2*i+2);
A+=*p;
B+=*q;
i++;
}
cout<<"A:";
A.Printlist();
cout<<"B:";
B.Printlist();
cout<<"B copy A"<<endl;
A=B;
cout<<"A:";
A.Printlist();
cout<<"B:";
B.Printlist();
Node<int> *a=new Node<int>(12);
cout<<"add one node to A"<<endl;
A+=*a;
cout<<"A:";
A.Printlist();
cout<<"C:";
List<int> C;
i=0;
while(i<3){
Node<int> *p;
p=new Node<int>(10*i+20);
C+=*p;
i++;
}
C.Printlist();
cout<<"A+C"<<endl;
A+=C;
cout<<"A:";
A.Printlist();
cout<<"C:";
C.Printlist();
cout<<"D=A+B+C"<<endl;
List<int> D;
D=A+B+C;
cout<<"A:";
A.Printlist();
cout<<"B:";
B.Printlist();
cout<<"C:";
C.Printlist();
cout<<"D:";
D.Printlist();
}
\\\
while I run the code above on either gcc or Xcode ,it turns out perfectly. the results are as bellow: A:1 3 5 7 9 B:2 4 6 8 10
A:2 4 6 8 10 B:2 4 6 8 10
A:2 4 6 8 10 12 C:20 30 40 A+C A:2 4 6 8 10 12 20 30 40 C:20 30 40 D=A+B+C A:2 4 6 8 10 12 20 30 40 B:2 4 6 8 10 C:20 30 40 D:2 4 6 8 10 12 20 30 40 2 4 6 8 10 20 30 40 Program ended with exit code: 0 while msvc could not run why?