第十二周项目三-数组类运算的实现

来源:互联网 发布:不属于java语言特点 编辑:程序博客网 时间:2024/05/16 15:03

问题及代码:

/**烟台大学计算机学院*文件名称:xiangmu3.cpp*作    者:闫安*完成日期:2016年6月4日*版 本 号:codeblocks 16.01**问题描述:设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数          (构造、析构函数)和运算符重载的函数。实现策略提示:可以将测试函          数中的语句加上注释,取消一句的注释,增加相应的函数,以渐增地实现          所有的功能,避免全盘考虑带来的困难。*程序输入:无*程序输出:运算结果*/#include<iostream>#include<iomanip>#include<cassert>using namespace std;class Array{private:    int* list;      //用于存放动态分配的数组内存首地址    int size;       //数组大小(元素个数)public:    //成员函数声明    Array(int s=50);   //构造函数    Array(int *l,int s);   //构造函数    Array(const Array &a);    //复制狗仔函数    ~Array();    //析构函数    void show();     //输出数组    Array operator+(const Array &a);     //重载+    Array operator=(const Array &a);     //重载=    void resize(int s);         //改变数组长度    int &operator[] (int n) const;  //重载[]};//要求测试函数能够运行出正确、合理的结果:Array::Array(int s){    size=s;    list=new int[size];}Array::Array(int *l,int s){    list=new int [s];    size=s;    for(int i=0;i<s;i++)        list[i]=l[i];}Array::Array(const Array &a){    size=a.size;    list=new int [size];    for(int i=0;i<size;i++)        list[i]=a.list[i];}Array::~Array(){    delete []list;}void Array::show(){    for(int i=0;i<size;i++)        cout<<list[i]<<" ";        cout<<endl;}Array Array::operator+(const Array &a){    assert(size == a.size);    //检查下标是否越界    //如果本对象中数组大小与a2不同,则删除数组原有内存,然后重新分配    Array total(size);    for (int i = 0; i < size; i++)        total.list[i] = list[i]+a.list[i];    return total;}Array Array::operator=(const Array &a){    if (&a!= this)    {        //如果本对象中数组大小与a2不同,则删除数组原有内存,然后重新分配        if (size!=a.size)        {            delete [] list; //删除数组原有内存            size=a.size; //设置本对象的数组大小            list=new int[size];   //重新分配n个元素的内存        }        //从对象X复制数组元素到本对象        for (int i=0;i<size;i++)            list[i]=a.list[i];    }    return *this;   //返回当前对象的引用}void Array::resize(int s){    size=s;}//常对象时,会调用这个函数,运算结果(引用)将不能再被赋值int &Array::operator[] (int n) const{    assert(n>=0&&n<size); //检查下标是否越界    return list[n];         //返回下标为n的数组元素}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;}

运行结果:


知识点总结:

       运用了运算符重载

学习心得:

       1.第一个错误是关于构造函数的,开始时只写了Array(int *l,int s);  没有写Array(int s=50);导致了错误

       2.第二个错误是因为const  int &operator[] (int n) const;        再去掉第一个const后程序正确

       3.一开始忘了写对[ ]的重载函数

0 0