类模板与运算符重载问题
程序代码:#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 编辑 ]




