//myqueue.h using namespace std; template <class Type> class Queue; template <class Type> class QueueItem { friend class Queue<Type>; QueueItem(const Type &t):item(t),next(0){} Type item; QueueItem *next; }; template <class Type> class Queue { QueueItem<Type> *head; QueueItem<Type> *tail; void destory(); void copy_elems(const Queue &); public: Queue():head(0),tail(0){} Queue(const Queue &Q):head(0),tail(0) { copy_elems(Q); } Queue & operator = (const Queue &); ~Queue() { destory(); } Type &front() { return head->item; } const Type &front ()const { return head->item; } void push(const Type &); void pop(); bool empty() const { return head==0; } }; //myqueue.cpp #include "myheader.h" #include "myqueue.h" using namespace std; template <class Type> void Queue<Type>::destory() { while (!empty()) pop(); } template <class Type> void Queue<Type>::pop() { QueueItem<Type> *p=head; head =head->next; delete p; } template <class Type> void Queue<Type>::push(const Type &val) { QueueItem<Type> *pt =new QueueItem<Type>(val); if( empty()) head =tail =pt; else { tail->next = pt; tail =pt; } } template <class Type> void Queue<Type>::copy_elems(const Queue &orig) { for( QueueItem<Type> *pt =orig.head; pt; pt=pt->next) push(pt->item); } template <class Type> Queue<Type> & Queue<Type>::operator = (const Queue &orig) { Queue<Type> *queue=new Queue<Type>; for( QueueItem<Type> *pt =orig.head; pt; pt=pt->next) queue.push(pt->item); return *queue; } //main.cpp #include "myheader.h" #include "myqueue.h" using namespace std; int main() { Queue<int> fq; return 0; }