C++中实现 数组类

#include <iostream>

using namespace std;
class Array{
    int* data; //数组首地址
    int sz;   //数组中实际有多少个数据
    int m; //数组当前容量
public:
    //构造
    Array( int x = 10): sz(0), data(0), m(x){
        data = new int[m];
    }
    //析构函数
    ~Array(){
        delete[] data; //释放申请的堆空间
    }
    //成员中有指针,为深拷贝,重写拷贝构造函数
    Array( const Array& a ){
        sz = a.sz;
        m = a.m;
        data = new int[m];
        int i = 0;
        for(i=0; i<sz; i++){
            data[i] = a.data[i];
        }
    }
    //同样原因,赋值函数也要自己写
    Array& operator=( const Array& a ){
        //1 判断自赋值
        if( this == &a ){
            return *this; //若是自己赋值给自己,直接返回当前对象
        }
        //2 释放原空间
        delete[] data;
        //3 申请新空间,因为大小不一样,所以要先释放,再申请新空间
        data = new int[a.m];
        //4 拷贝数据
        sz = a.sz;
        m = a.m;
        int i = 0;
        for(i=0; i<sz; i++){
            data[i] = a.data[i];
        }
        //5返回当前对象
        return *this;
    }

    //重载输出运算符
    friend ostream& operator<<( ostream& o, const Array& a){
        int i = 0;
        for(i=0; i<a.sz; i++){
            cout << a.data[i] << ' ';
        }
        return o;
    }

    int& operator[](int index){ //重载 [] 运算符
        return data[index]; //返回变量本身
    }

    void pushback( int x ){
        //若空间已满,扩容
        if(sz >= m){
            m *= 2;
            Array tmp = *this; //定义临时对象保存当前对象数据
            delete[] data; //释放原空间
            data = new int[m]; //申请新空间
            *this = tmp; //用保存的数据给当前对象赋值
        }
        data[sz++] = x;
    }

    void show(){
        cout << "max=" << m << endl;
        cout << "sz=" << sz << endl;
    }
};


int main(){
    Array a;
    Array b;
    a.pushback(400);
    int i=0;
    for(i=0; i<10; i++){
  a.pushback(i);
 }
 cout << a << endl;
 b = a;
 cout << b << endl;
 a.show();

 cout << a[3] << endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值