64,701
社区成员
发帖
与我相关
我的任务
分享
template <class T> class Array1D;//类的前向声明
template <class T> istream &operator>>(istream &in, Array1D<T> &r);//函数模板声明
template <class T> ostream &operator<<(ostream &out, const Array1D<T> &r);
template <class T>
class Array1D
{
public:
Array1D(int sz=0);
~Array1D() { delete [] elements; }
T& operator [] (int i) const; //重载[],取元素值
Array1D<T>&operator =(const Array1D<T> &r); //整体赋值
friend istream &operator>> <T>(istream &in, Array1D &r);//注意那个<T>,参数中Array1D可以不带<T>
friend ostream &operator<< <T>(ostream &out, const Array1D &r);
private:
int size;
T *elements; //指向T类型数组的指
};
template <class T>
istream &operator>>(istream &in, Array1D<T> &r)
{
...
}
template <class T>
ostream &operator<<(ostream &out, const Array1D<T> &r)
{
...
}
template <class T>
class Array1D
{
public:
Array1D(int sz=0);
~Array1D() { delete [] elements; }
T& operator [] (int i) const; //重载[],取元素值
Array1D<T>&operator =(const Array1D<T> &r); //整体赋值
friend istream &operator>>(istream &in, Array1D<T> &r)//此时,默认为内联函数
{
...
}
friend ostream &operator<<(ostream &out, const Array1D<T> &r)
{
...
}
private:
int size;
T *elements; //指向T类型数组的指
};
template <class T>
class Array1D
{
public:
Array1D(int sz=0);
~Array1D() { delete [] elements; }
T& operator [] (int i) const; //重载[],取元素值
Array1D<T>&operator =(const Array1D<T> &r); //整体赋值
template <class Type> friend istream &operator>>(istream &in, Array1D<Type> &r);
template <class Type> friend ostream &operator<<(ostream &out, const Array1D<Type> &r);
private:
int size;
T *elements; //指向T类型数组的指
};
template <class Type>
istream &operator>>(istream &in, Array1D<Type> &r)
{
...
}
template <class Type>
ostream &operator<<(ostream &out, const Array1D<Type> &r)
{
...
}
template <class T>
class Array1D
{
public:
Array1D(int sz=0);
~Array1D() { delete [] elements; }
T& operator [] (int i) const; //重载[],取元素值
Array1D<T>&operator =(const Array1D<T> &r); //整体赋值
friend istream &operator>>(istream &in, Array1D<T> &r);
friend ostream &operator<<(ostream &out, const Array1D<T> &r);
private:
int size;
T *elements; //指向T类型数组的指
};
//根据实例直接定义函数实体,比如使用Array1D<int>的对象
//这是普通函数,应此不需要template <class T>
istream &operator>>(istream &in, Array1D<int> &r)//如要用Array1D<char>的对象需要另行定义一个函数
{
...
}
ostream &operator<<(ostream &out, const Array1D<int> &r)
{
...
}
template<class T>
friend ostream& operator<<(ostream&,const Array1D<T> &r);
template<class T>
friend istream &operator>>(istream &in, Array1D<T> &r);
template <class T>
class Array1D {
public:
Array1D(int sz=0);
~Array1D() { delete [] elements; }
T& operator [] (int i) const; //重载[],取元素值
Array1D<T>&operator =(const Array1D<T> &r); //整体赋值
friend istream &operator>> <T>(istream &in, Array1D<T> &r);
friend ostream &operator<< <T>(ostream &out, const Array1D<T> &r);
private:
int size;
T *elements; //指向T类型数组的指
};