通过动态分配的方法实现了动态数组的创建,其中包括多种运算符重载。
#include
#define SIZE 100
using namespace std;
template
class Array {
private:
T *m_data;
int length;//数组长度
public:
//无参构造函数
Array() {
length = 0;
m_data = new T[SIZE];
} //有参构造函数,参数为数组的长度
Array(int n) : length(n) {
m_data = new T[length];
} //有参构造函数,参数为数组的长度和初始化元素
Array(int n, T x) : length(n) {
m_data = new T[length];
for (int i = 0; i < length; i++)
m_data[i] = x;
} //拷贝构造函数
Array(const Array &rhs) {
length = rhs.length;
m_data = new T[length];
for (int i = 0; i < length; i++)
m_data[i] = rhs.m_data[i];
} //析构函数
~Array() {
length = 0;
delete[] m_data;
} //返回数组长度
int size() const {
return length;
} //重载+运算符
Array operator+(Array &rhs) {
Array sum;
if (this->length > rhs.length)
sum.length = rhs.length;
else
sum.length = this->length;
for (int i = 0; i < sum.length; i++)
sum.m_data[i] = this->m_data[i] + rhs.m_data[i];
return sum;
} //重载-运算符
Array operator-(Array &rhs) {
Array sub;
if (this->length > rhs.length)
sub.length = rhs.length;
else
sub.length = this->length;
for (int i = 0; i < sub.length; i++)
sub.m_data[i] = this->m_data[i] - rhs.m_data[i];
return sub;
} //重载==运算符
bool operator==(Array &rhs) {
int count = 0;
if (length == rhs.length) {
for (int i = 0; i < length; i++) {
if (m_data[i] == rhs.m_data[i])
count++;
}
if (count == length)
return true;
else
return false;
} else
return false;
} //重载[]运算符
int &operator[](int index) {
if (index < 0 || index >= length)
throw "invalid index";
return m_data[index];
} //重载=运算符
void operator=(Array &rhs) {
length = rhs.length;
for (int i = 0; i < length; i++)
m_data[i] = rhs.m_data[i];
} //输出运算符<<
friend ostream &operator<<(ostream &output, const Array &rhs) {
for (int i = 0; i < rhs.length; i++)
output << rhs.m_data[i] << " ";
return output;
} //输入运算符>>
friend istream &operator>>(istream &input, Array &rhs) {
while (input >> rhs.m_data[rhs.length]){rhs.length++;}
return input;
}
};
int main()
{
try {
Array
a1;
cout << "Please input a1: ";
cin >> a1;
cout << "a1: " << a1 << endl;
a1[0] = 5, a1[1] = 6;
cout << "a1: " << a1 << endl;
Array
a2(a1);
cout << "a2: " << a2 << endl;
Array
a3 = a2; cout << "a3: " << a3 << endl; cout << "a1 == a2 " << (a1 == a2) << endl; cout << "a2 == a3 " << (a2 == a3) << endl; Array
a4 = a1 + a2 - a3; cout << "a4: " << a4 << endl; } catch (const char *msg) { cout << msg << endl; } return 0; }