第2个回答 2020-03-02
#include
<cstdlib>
#include
<iostream>
#include
<string.h>
#define
MAX_SIZE
1000
using
namespace
std;
template<class
Any>
class
Array
{
public:
//注意这里,为了方便调试,先把所有成员都public了
Any
a[MAX_SIZE];
int
length;
Array(Any
*p)
{
length=strlen(p);
for
(int
i=0;i<length;i++)
{
a[i]=p[i];
}
}
Any
GetElem(int);
int
Length(){return
length;}
Any
operator[](int);
friend
ostream
&
operator
<<
(ostream
&,
Array<Any>
&);
//注意这里,和原式有所不同,去掉了一个<Any>
};
template<class
Any>
Any
Array<Any>::GetElem(int
n)
{
return
a[n];
}
template<class
Any>
Any
Array<Any>::operator
[](int
i)
{
if
(i>=0&&i<length)
{
return
a[i];
}
else
{
cout<<"下标越界"<<endl;
return
0;
//注意这里,增加了一个缺省返回值
}
}
template<class
Any>
ostream
&
operator
<<
(ostream
&output,Array<Any>
&obj)
{
for(int
i=0;i<obj.Length();i++)
{
output<<obj.a[i];
}
return
output;
}
int
main(int
argc,
char
*argv[])
{
Array<char>
s("abcde");//这行没有错,是前面的错误导致到这行过不去
cout<<s.GetElem(2)<<endl;
cout<<s[3]<<endl;
cout<<s;
system("PAUSE");
return
EXIT_SUCCESS;
}