请大人指教我一下, 为什么我的操作符不能多类型实例化,
以下的程序很简单, 是个队列的链表表示方法, 用<<来添加,
用>> 来删除, 用重载的<<来显示队列. 目前的问题是不能
同时实例化两种类型的队列(int 和double), 经过跟踪分析,
如果把操作符重载全部注释, 可以实例化两种类型的队列,
所以问题可能出现在操作符重载, 希望高手明示一下.
运行结果是: 打印一个int类型的队列(1-11).
#include <iostream>
#define taillemax 20
using namespace std;
template <class T>
class ElementCase{
public:
T Data;
public:
ElementCase<T> *Next;
ElementCase(T &n):Data(n),Next(NULL){}
};
template <class T>
class File{
public: ElementCase<T> *head;
ElementCase<T> *tail;
int size;
File<T>():size(0){} //修改的地方
bool IsEmpty();
bool IsFull();
T Remove();
void Reset();
void operator<<(T &n);
void operator>>(T &n);
template <class Type>
friend void operator<<(ostream &s, File<T> &f);
};
template <class T>
bool File<T>::IsEmpty(){
if (size==0) return true;
else return false;
}
template <class T>
bool File<T>::IsFull(){
if (size==taillemax) return true;
else return false;
}
template <class T>
void File<T>::operator<<(T &n){
ElementCase<T> *p;
p=new ElementCase<T>(n);
if(size==0){
head=p;
tail=p;
size=1;
return;
}
if(!IsFull()){
tail->Next=p;
tail=p;
size+=1;
}
else cout<<"Pleine"<<endl;
}
template <class T>
T File<T>::Remove(){
if(IsEmpty()){
cout<<"Vide"<<endl;
return 0;
}
ElementCase<T> *p=head;
head=head->Next;
T retval=p->Data;
delete p;
size-=1;
return retval;
}
template <class T>
void File<T>::Reset(){
if(IsEmpty()){
cout<<"Vide"<<endl;
return;
}
int increment=size;
ElementCase<T> *p;
for(int i=1;i<=increment;i++){
p=head;
head=head->Next;
delete p;
size--;
}
}
template <class T>
void File<T>::operator>>(T &n){
ElementCase<T> *p;
if(!IsEmpty()){
n=Remove();
}
else cout<<"Vide"<<endl;
}
template <class T>
void operator<<(ostream &s, File<T> &f){
ElementCase<T> *p=f.head;
if(f.IsEmpty()){cout<<"File vide";return;}
for(int i=1;i<=f.size;i++){
s<<p->Data<<" ";
p=p->Next;
}
}
int main(){
File<int> file_int;
int IntInc=1;
for(int i=0;i<=10;i++) {
file_int<<IntInc;
IntInc++;
}
cout<<file_int;
File<double> file_double;
cout<<file_double.head->Data;
double DoubleInc=1.1;
for(int i=0;i<=10;i++) {
file_double<<DoubleInc;
DoubleInc++;
}
cout<<file_double;
}
[此贴子已经被作者于2006-3-24 5:24:03编辑过]