// 构造函数
template
Array::Array(int size) {
list = new T[size];
this->size = size;
}
// 拷贝构造函数
template
Array::Array(const Array& a) {
size = a.size;
list = new T[size];
for (int i = 0; i < size; i++) {
list[i] = a.list[i];
}
}
// 析构函数
template
Array::~Array() {
delete[] list;
}
// 重载"[]"
template
T & Array::operator[](int i) {
return list[i];
}
// 重载 "+", 完成两个数组内容的拼接
template
Array & Array::operator+(Array& rhs) {
Array* res = new Array(size + rhs.size);
for (int i = 0; i < size; i++) {
(*res)[i] = list[i];
}
for (int i = 0; i < rhs.size; i++) {
(*res)[size + i] = rhs.list[i];
}
return *res;
}
// 返回数组大小
template
int Array::getsize() {
return size;
}
// 重载"<<"运算符为非成员函数
template
ostream& operator<<(ostream& os, Array& a) {
for (int i = 0; i < a.size; i++) {
os << a.list[i];
if (i < a.size - 1) {
os << ',';
}
}
return os;
}
class Array {
public:
Array(int size = 50);
Array(const Array& a);
~Array();
T & operator [](int i); // 重载"[]"
Array & operator+ (Array &rhs); // 重载 "+", 完成两个数组内容的拼接
int getsize(); // 返回数组大小
template
friend ostream& operator<<(ostream& os, Array& a);
private:
T* list;
int size;
};