第十五周项目一 —— 建立专门的数组类处理有关数组的操作

来源:互联网 发布:oc编程之道 编辑:程序博客网 时间:2024/05/21 22:58
/* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: object.cpp * 作者:杨晨 * 完成日期: 2013年6 月  7日 * 版本号: v1.0 * 输入描述:无 * 问题描述: * 程序输出: */  #include <iostream>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; //取数组大小;    void Resize(int sz);    //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】};MyArray::MyArray(int sz){    size=sz;    arr = new int[sz];    for(int i=0;i<sz;i++)    {        *(arr+i)=0;    }}MyArray::MyArray(int a[],int sz){    size = sz;    arr=new int[sz];    for (int i=0; i<sz; ++i)    {        *(arr+i)=*(a+i);    }}MyArray::MyArray(const MyArray &A){    size=A.size;    arr=new int[A.size];    for (int i=0; i<A.size; ++i)    {        *(arr+i)=*(A.arr+i);    }}MyArray::~MyArray(void){    if (!arr)        delete [] arr;}MyArray & MyArray::operator =(const MyArray &A){    size=A.size;    arr=new int[A.size];    for (int i=0; i<A.size; ++i)    {        *(arr+i)=*(A.arr+i);    }    return *this;}bool MyArray::operator == (MyArray& A){    bool ma=true;    int n = A.size;    if(size != A.size)    {        ma = false;    }    else    {        while (n)        {            if(*(arr+n) != *(A.arr+n))            {                ma = false;                break;            }            n--;        }    }    return ma;}ostream& operator << (ostream& output,MyArray& A){    for(int i=0;i<A.size;++i)    {        output<<*(A.arr+i)<<"  ";    };    cout<<endl;    return output;}int MyArray::GetSize(void)const{    return size;}void MyArray::Resize(int sz){    int *newlist=new int[sz];    for (int i = 0; i < sz; i++)    {        *(newlist+i)=0;    }    int n=(sz<=size)?sz:size;    int *arr1=arr;    int *newlist1=newlist;    while(n--)    {        *newlist1=*arr1;arr1++;        newlist1++;    }    arr=newlist;    size=sz;}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;}


输出结果:

心得体会:

对于析构函数的功能运用还是不大行。。

原创粉丝点击