Тема: Створіть клас Масив із конструкторами, деструктором та перевантаженими
Добрий день,є ось таке завданнячко:створіть клас Масив із конструкторами, деструктором та перевантаженими операторами [], =, ++, -- (збільшення та зменшення на одиницю всіх елементів масиву), <<, >>. Продемонструйте роботу із створеним масивом.
Ось код ,а питання полягає в тому ,як можно "простіше написати цей код"
#include <iostream>
#include <ostream>
using namespace std;
class Array {
public:
    explicit Array(const std::size_t size) : size{ size }, data{ new int[size] } {}
    Array(const Array &other) : size{ other.size }, data{ new int[other.size] } {
        for (int i = 0; i < other.size; ++i) {
            data[i] = other.data[i];
        }
    }
    // copy assignment
    Array &operator=(const Array &other) {
        if (this != &other) {
            delete[] data;
            this->size = other.size;
            this->data = new int[other.size];
            for (int i = 0; i < other.size; ++i) {
                data[i] = other.data[i];
            }
        }
        return *this;
    }
    // destructor
    virtual ~Array() {
        delete[] data;
    }
    int operator[](size_t i) const {
        return data[i];
    }
    int &operator[](size_t i) {
        return data[i];
    }
    size_t getSize() const {
        return size;
    }
private:
    size_t size;
    int *data;
};
// prefix
Array &operator++(Array &array) {
    for (size_t i = 0; i < array.getSize(); ++i) {
        ++array[i];
    }
    return array;
}
// postfix
Array operator++(Array &array, int) {
    Array temp{ array };
    ++array;
    return temp;
}
// prefix
Array &operator--(Array &array) {
    for (size_t i = 0; i < array.getSize(); ++i) {
        --array[i];
    }
    return array;
}
// postfix
Array operator--(Array &array, int) {
    Array temp{ array };
    --array;
    return temp;
}
std::ostream &operator<<(ostream &out, const Array &array) {
    for (size_t i = 0; i < array.getSize(); ++i) {
        out << array[i] << " ";
    }
    return out;
}
std::istream &operator>>(istream &in, Array &array) {
    for (size_t i = 0; i < array.getSize(); ++i) {
        in >> array[i];
    }
    return in;
}
int main() {
    
    cout << c << std::endl;
   cout << c++ << std::endl;
    cout << c << std::endl;
    cout << ++c << std::endl;
    cout << c << std::endl;
    cout << c-- << std::endl;
    cout << c << std::endl;
    cout << --c << std::endl;
    return 0;
}