#include "stdafx.h"
#include <iostream>
using namespace std;
// 错误的例子
//template <class T> class ListItem;
//template <class T> class List {
//public:
// List<T> ();
// List<T> ( const List<T>& );
// List<T>& operator = (const List<T>&);
//
// ~List();
//
// void insert(ListItem* ptr, T value_);
// ListItem *find(T value_);
//
//private:
// ListItem *front;
// ListItem *end;
//};
template <class Type>
class QueueItem {
public:
QueueItem(const Type &t) : item(t), next(0) {}
Type item;
QueueItem *next;
};
template <class Type>
class Queue {
public:
Queue() : head(0),tail(0) {}
Queue(const Queue &Q):head(0), tail(0) {
copy_elems(Q);
}
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& operator=(const Queue<Type2>&);
~Queue() { destroy(); }
Type& front() { return head->item; }
const Type &front() const { return head->item; }
void push( const Type& );
void pop();
bool empty() const {
return head == 0;
}
private:
QueueItem<Type> *head;
QueueItem<Type> *tail;
void destroy();
void copy_elems(const Queue&);
};
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>::pop()
{
QueueItem<Type>* p = head;
head = head->next;
delete p;
}
template <class Type>
void Queue<Type>::destroy()
{
while(!empty())
pop();
}
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>
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& Queue<Type>::operator=( const Queue<Type2>& orig)
{
if((void*)this == (void*)&orig) {
*this;
}
Queue<Type2> tmp(orig);
destroy(); // delete
while(!tmp.empty())
{
push(tmp.front());
tmp.pop();
}
return *this;
}
int main()
{
Queue<int> qi;
short s = 43;
int i = 23;
qi.push(s);
qi.push(i);
Queue<float> ai;
ai = qi;
Queue<int> bi;
return 0;
}
#include <iostream>
using namespace std;
// 错误的例子
//template <class T> class ListItem;
//template <class T> class List {
//public:
// List<T> ();
// List<T> ( const List<T>& );
// List<T>& operator = (const List<T>&);
//
// ~List();
//
// void insert(ListItem* ptr, T value_);
// ListItem *find(T value_);
//
//private:
// ListItem *front;
// ListItem *end;
//};
template <class Type>
class QueueItem {
public:
QueueItem(const Type &t) : item(t), next(0) {}
Type item;
QueueItem *next;
};
template <class Type>
class Queue {
public:
Queue() : head(0),tail(0) {}
Queue(const Queue &Q):head(0), tail(0) {
copy_elems(Q);
}
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& operator=(const Queue<Type2>&);
~Queue() { destroy(); }
Type& front() { return head->item; }
const Type &front() const { return head->item; }
void push( const Type& );
void pop();
bool empty() const {
return head == 0;
}
private:
QueueItem<Type> *head;
QueueItem<Type> *tail;
void destroy();
void copy_elems(const Queue&);
};
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>::pop()
{
QueueItem<Type>* p = head;
head = head->next;
delete p;
}
template <class Type>
void Queue<Type>::destroy()
{
while(!empty())
pop();
}
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>
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& Queue<Type>::operator=( const Queue<Type2>& orig)
{
if((void*)this == (void*)&orig) {
*this;
}
Queue<Type2> tmp(orig);
destroy(); // delete
while(!tmp.empty())
{
push(tmp.front());
tmp.pop();
}
return *this;
}
int main()
{
Queue<int> qi;
short s = 43;
int i = 23;
qi.push(s);
qi.push(i);
Queue<float> ai;
ai = qi;
Queue<int> bi;
return 0;
}
792

被折叠的 条评论
为什么被折叠?



