15周项目一(建立专门的数组类处理有关数组的操作)

来源:互联网 发布:佛教闭关可以有网络吗 编辑:程序博客网 时间:2024/06/07 05:19
/*    *程序的版权和版本声明部分          * Copyright (c)2013, 烟台大学计算机学院学生        * All rightsreserved.         * 文件名称:MyArray .cpp       * 作    者:  田凤        *完成日期:2013年6月14日      * 版本号: v1.0                 * 输入描述: 略     * 问题描述:略       * 输出:略*代码:#include<iostream>#include <cstdlib>using namespace std;class MyArray{private:    int *arr;//用于存放动态分配的数组内存首地址    int size;//数组大小public:    MyArray(int sz=50);    MyArray(int a[],int sz);//由一个内置类型的数组初始化    MyArray(const MyArray &A);//复制构造函数    ~MyArray(void);    //析构函数,注意释放空间    MyArray&operator =(const MyArray &A); //重载“=”使得数组对象可以整体赋值    bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)    friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组    int GetSize(void) const; //取数组大小;};MyArray::MyArray(int sz){    if(sz<=0)    {        cout<<"invalid Array Size!";        exit(1);    }    size=sz;            //将元素个数赋值给变量size    arr=new int[size];  //动态分配内存,将size个int类型的元素空间分配出来    for(int i=0; i<size; ++i)        *(arr+i)=0;}MyArray::MyArray(int a[],int sz){    if(sz<=0)    {        cout<<"invalid Array Size";        exit(1);    }    size=sz;//将元素个数赋值给变量size    arr=new int[size];//动态分配内存,将size个int类型的元素空间分配出来    for(int i=0; i<size; ++i)        *(arr+i)=*(a+i);}MyArray:: MyArray(const MyArray &A){    //从对象A取得数组大小,并赋给当前对象成员    int n=A.size;    size=n;    //为对象申请内存并进行出错检测    arr=new int[n];    //从对象A复制数组元素到本对象    int *srcptr=A.arr;//X.arr是对象A的数组首地址    int *destptr=arr;//arr是本对象中的数组首地址    while(n--)    {        *destptr=*srcptr;        destptr++;        srcptr++;    }}MyArray::~MyArray(void)//析构函数{    if (!arr)        delete [] arr;}MyArray& MyArray::operator =(const MyArray &A)//重载赋值运算'='{    int n=A.size;//取A数组的大小    //如果本对象中的数组大小和A不同,则删除数组原有的内存,然后重新分配    if (size!=n)    {        delete []arr;        arr=new int[n];        size=n;    }    //从rhs向当前对象复制元素    int* destptr=arr;    int* srcptr=A.arr;    while(n--)    {        *destptr=*srcptr;        destptr++;        srcptr++;    }    return *this;//返回当前对象的引用}bool MyArray::operator == (MyArray& A){    bool eq=true;    int n=A.size;   //取A数组的大小    if (size!=n)    //大小不一致,数组一定不相等    {        eq=false;    }  else    {      int* destptr=arr;        int* srcptr=A.arr;        while(n--)        {            if(*destptr!=*srcptr)            {                eq=false;     //其中有一个元素不相等,则数组也不相等                break;            }            destptr++;            srcptr++;        }    }    return eq;//返回当前对象的引用}ostream& operator << (ostream& out, MyArray& A){    for (int i = 0; i < A.size; i++)    {        out<<*(A.arr+i)<<'\t';    }    out<<endl;    return out;}//取当前数组大小int MyArray::GetSize(void)const{    return size;}int main(){    int a[10]= {1,2,3,4,5,6,7,8,9,10};    int b[10]= {4,5,6,7,8,9,10,11,12,13};    MyArray arr1(a,10);  //测试用内置的数组初始化新定义的数组对象    MyArray arr2(b,10);    MyArray arr3(10);   //测试只指定大小的新数组对象的初始化    cout<<arr1;    //测试对<<的重载    cout<<arr2;    //测试对<<的重载    cout<<arr3;    //测试对<<的重载    cout<<"The size of arr1 is: "<<arr1.GetSize()<<endl;   //测试GetSize()成员函数    return 0;}

*运行结果:

*心得体会:有些知识不太懂,还是好好看书吧~~~