动态分配数组C++模板

来源:互联网 发布:拱拱淘宝工具箱下载 编辑:程序博客网 时间:2024/06/05 00:36

通过动态分配的方法实现了动态数组的创建,其中包括多种运算符重载。

#include #define SIZE 100using 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;}