// 构造函数
template
Array::Array(int size) {
this->size = size;
list = new T[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) {
if (i < 0 || i >= size) {
cout << "数组下标越界!" << endl;
exit(1);
}
return list[i];
}
// 重载"+"运算符
template
Array & Array::operator+ (Array &rhs) {
Array *temp = new Array(size + rhs.size);
for (int i = 0; i < size; i++) {
(*temp)[i] = list[i];
}
for (int i = 0; i < rhs.size; i++) {
(*temp)[i + size] = rhs.list[i];
}
return *temp;
}
// 返回数组大小
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;
};