[c++]实例-类array,重载操作符


#include "ARRAY.hpp"
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
ARRAY::ARRAY(int arraysize) {
    size = (arraysize > 0 ? arraysize : 10);
    ptr = new int[size];
    for (int i = 0; i < size; i++) {
        ptr[i] = 0;
    }
}

ARRAY::ARRAY(const ARRAY &arraytocopy)
: size (arraytocopy.size) {
    ptr = new int[size];
    for (int i = 0; i < size; i++) {
        ptr[i] = arraytocopy.ptr[i];
    }
}

ARRAY::~ARRAY() {
    delete [] ptr;
}

int ARRAY::getsize() const {
    return size;
}

const ARRAY &ARRAY::operator = (const ARRAY &right) {
    if (&right != this) {
        if (size != right.size) {
            delete [] ptr;
            size = right.size;
            ptr = new int[size];
        }
        for (int i = 0; i < size; i++) {
            ptr[i] = right.ptr[i];
        }
    }
    return *this;
}

bool ARRAY::operator==(const ARRAY &right) const {
    if (size != right.size) {
        return false;
    }
    for (int i = 0; i < size; i++) {
        if (ptr[i] != right.ptr[i]) {
            return false;
        }
    }
    return true;
}

int &ARRAY::operator[](int subscript) {
    if (subscript < 0 || subscript >= size) {
        cout << "\nERROR" << subscript << "out_of_range" <<endl;
        exit(1);
    }
    return ptr[subscript];
}

int ARRAY::operator[](int subscript) const {
    if (subscript < 0 || subscript >= size) {
        cout << "\nERROR" << subscript << "out_of_range" <<endl;
        exit(1);
    }
    return ptr[subscript];
}

istream &operator >> (istream &input, ARRAY &a) {
    for (int i = 0; i < a.size; i++) {
        input >> a.ptr[i];
    }
    return input;
}

ostream &operator << (ostream &output, const ARRAY &a) {
    int i;
    for (i = 0; i < a.size; i++) {
        output << setw(12) << a.ptr[i]; // setw()填充内容为空格
        if (( i + 1) % 4 == 0) {
            output << "\n";
        }
    }
    if (i % 4 != 0) {
        output << endl;
    }
    return output;
}
#ifndef ARRAY_hpp
#define ARRAY_hpp

#include <iostream>
using namespace std;

class ARRAY {
    friend ostream &operator << (ostream&, const ARRAY &);
    friend istream &operator >> (istream&, ARRAY &);
public:
    ARRAY(int = 10);
    ARRAY(const ARRAY &);
    ~ARRAY();
    int getsize() const;
    const ARRAY &operator = (const ARRAY &);
    bool operator == (const ARRAY &) const;
    bool operator != (const ARRAY &right) const {
        return ! (*this == right);
    }
    int &operator [](int);
    int operator [](int) const;

private:
    int size;
    int *ptr;
};

#endif /* ARRAY_hpp */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值