类模板与运算符重载问题
程序代码:
#include "stdafx.h" #include "iostream" using namespace std; #include "iomanip" template <class T> class Array { private: T *phead;int H; public : Array(T *a,int h) { T *t; H=h; phead=new T[H]; t=phead; for(int i=0;i<H;i++) *t++=*a++; } ~Array(){delete []phead;} void Sort(); void Search(T a); T Sum(); template <class X> friend ostream & operator<<(ostream &out,Array<X> &a); //void Display(); }; template <class X> ostream & operator<<(ostream &out,Array<X> &a) { out<<"输出结果:"<<endl; for(int i=0;i<a.H;i++) out<<setw(4)<<*(a.phead+i); out<<endl; return out; } template <class T> void Array<T>::Sort() { int i,j,k;T temp; for(i=0;i<H;i++) { k=i; for(j=i+1;j<H;j++) if(*(phead+k)>*(phead+j))k=j; if(k!=i) { temp=*(phead+i); *(phead+i)=*(phead+k); *(phead+k)=temp; } } } template <class T> void Array<T>::Search(T a) { int i,k=0; T *temp; temp=phead; for(i=0;i<H;i++) { if(a==*(temp+i)) { k=1;break; } } if(k==1)cout<<"找到其下标为:"<<i<<endl; else cout<<"No find !"<<endl; } template <class T> T Array<T>::Sum() { T sum=0.0; int i; for(i=0;i<H;i++) sum=sum+*(phead+i); return sum; } /*template <class T> void Array<T>::Display() { cout<<"结果:"<<endl; for(int i=0;i<H;i++) cout<<setw(4)<<*(phead+i); cout<<endl; }*/ int _tmain(int argc, _TCHAR* argv[]) { int a[6]={4,6,7,3,8,1}; double b[6]={4.3,6.5,7.6,3.3,8.7,1.9}; Array <int> A(a,6); //A.Display(); cout<<A; A.Sort(); //A.Display(); cout<<A; A.Search(8); cout<<"数组和:"<<A.Sum()<<endl; Array <double> B(b,6); //B.Display(); cout<<B; B.Sort(); //B.Display(); cout<<B; B.Search(3.3); cout<<"数组和:"<<B.Sum()<<endl; return 0; }友元重载<<运算符出错 没办法了 有错不会改 来求救了
[ 本帖最后由 tonlin 于 2010-6-2 23:26 编辑 ]