第12周项目3-数组类运算的实现

来源:互联网 发布:欧洲卡车模拟 知乎 编辑:程序博客网 时间:2024/06/07 18:35
#include <iostream>#include <iomanip>#include <cassert>using namespace std;class Array{private:    int* list;      //用于存放动态分配的数组内存首地址    int size;       //数组大小(元素个数)public:    Array(int sz = 50);     //构造函数    Array(int a[], int sz);     //构造函数    Array(const Array &a);  //拷贝构造函数    ~Array();          //析构函数    Array operator + (const Array &a2);     //重载"="    Array &operator = (const Array &a2);    //重载"="    int &operator[] (int i); //重载"[]"    const int &operator[] (int i) const;    int getSize() const;        //取数组的大小    void resize(int sz);        //修改数组的大小    void show() const;};Array::Array(int sz)  //构造函数{    assert(sz >= 0);//sz为数组大小(元素个数),应当非负    size = sz;  // 将元素个数赋值给变量size    list = new int [size];  //动态分配size个int类型的元素空间}Array::Array(int a[], int sz){    assert(sz >= 0);//sz为数组大小(元素个数),应当非负    size = sz;  // 将元素个数赋值给变量size    list = new int [size];  //动态分配size个int类型的元素空间    for (int i = 0; i < size; i++) //从对象X复制数组元素到本对象        list[i] = a[i];}Array::~Array()   //析构函数{    delete [] list;}//拷贝构造函数Array::Array(const Array &a){    size = a.size; //从对象x取得数组大小,并赋值给当前对象的成员    //为对象申请内存并进行出错检查    list = new int[size];   // 动态分配n个int类型的元素空间    for (int i = 0; i < size; i++) //从对象X复制数组元素到本对象        list[i] = a.list[i];}Array Array::operator + (const Array &a2){    assert(size == a2.size);    //检查下标是否越界    //如果本对象中数组大小与a2不同,则删除数组原有内存,然后重新分配    Array total(size);    for (int i = 0; i < size; i++)        total.list[i] = list[i]+a2.list[i];    return total;}//重载"="运算符,将对象a2赋值给本对象。实现对象之间的整体赋值Array &Array::operator = (const Array& a2){    if (&a2 != this)    {        //如果本对象中数组大小与a2不同,则删除数组原有内存,然后重新分配        if (size != a2.size)        {            delete [] list; //删除数组原有内存            size = a2.size; //设置本对象的数组大小            list = new int[size];   //重新分配n个元素的内存        }        //从对象X复制数组元素到本对象        for (int i = 0; i < size; i++)            list[i] = a2.list[i];    }    return *this;   //返回当前对象的引用}//重载下标运算符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能int &Array::operator[] (int n){    assert(n >= 0 && n < size); //检查下标是否越界    return list[n];         //返回下标为n的数组元素}//常对象时,会调用这个函数,运算结果(引用)将不能再被赋值const int &Array::operator[] (int n) const{    assert(n >= 0 && n < size); //检查下标是否越界    return list[n];         //返回下标为n的数组元素}//取当前数组的大小int Array::getSize() const{    return size;}//将数组大小修改为szvoid Array::resize(int sz){    assert(sz >= 0);    //检查sz是否非负    if (sz == size) //如果指定的大小与原有大小一样,什么也不做        return;    int* newList = new int [sz];    //申请新的数组内存    int n = (sz < size) ? sz : size;//将sz与size中较小的一个赋值给n    //将原有数组中前n个元素复制到新数组中    for (int i = 0; i < n; i++)        newList[i] = list[i];    delete[] list;      //删除原数组    list = newList; // 使list指向新数组    size = sz;  //更新size}void Array::show() const{    for (int i = 0; i < size; i++)        cout<< list[i]<<" ";    cout<<endl;}int main(){    int a[8]= {1,2,3,4,5,6,7,8};    int b[8]= {10,20,30,40,50,60,70,80};    Array array1(a,8),array3,array4;    const Array array2(b,8);    array4=array3=array1+array2;    array3.show();    array4.resize(20);    array4[8]=99;    cout<<array4[8]<<endl;    cout<<array2[3]<<endl;    return 0;}

运行结果:


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办 淘宝卖家填错地址货已经发了怎么办 拼多多没交保证金无法提现怎么办 信用卡被别人刷了没证据怎么办 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办 电脑上qq不小心删掉了怎么办 进了一批款式不好卖的衣服怎么办? 淘宝首页图片不居中代码装的怎么办 小语言代码装修以后不是全屏怎么办 招教年龄超过4个月怎么办 淘宝上注册的店铺被别人用了怎么办 淘宝贷款后店铺转让了贷款怎么办 手机千牛发布宝贝类目找不到怎么办 亚马逊被移除销售权该怎么办 玉米煮水不够熟吃了怎么办 华为云手机找回关了找回手机怎么办 我的淘宝号被别人盗用开店怎么办 淘宝买东西发货了不想要了怎么办 两张单号一样罚款已被处理怎么办 58同城登录电话换了怎么办 在超市买的东西坏了怎么办 安卓系统无法安装第三方软件怎么办 金立手机报毒不能安装软件怎么办 js中下拉菜单被图片挡住怎么办 更换主机后用户名跟密码忘了怎么办 换手机号了京东账号登录不上怎么办 口令卡绑定时访问页面找不回怎么办 手机淘宝购物车不小心删除了怎么办 上淘宝网图片文字不清晰怎么办 淘宝店铺低消费人群占比多怎么办