第十四周任务一
来源:互联网 发布:巨人网络注册 编辑:程序博客网 时间:2024/05/18 05:35
【题目】建立专门的数组类处理有关数组的操作
在下面代码的基础上,完成支持数组操作的类的设计,增强C++内置数组类型功能。
- 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); //重载“=”使得数组对象可以整体赋值
- int& operator[](int i); //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
- bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
- MyArray operator + (MyArray& A); //重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
- friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组
- int GetSize(void)const; //取数组大小;
- void Resize(int sz); //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;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<<arr3;
- arr3 = arr1 +arr2;
- cout<<arr3;
- arr3.Resize(20);
- cout<<arr3;
- arr3.Resize(5);
- cout<<arr3;
- system("pause");
- return 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); //重载“=”使得数组对象可以整体赋值
- int& operator[](int i); //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
- bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
- MyArray operator + (MyArray& A); //重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
- friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组
- int GetSize(void)const; //取数组大小;
- void Resize(int sz); //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;如果sz大于数组的原大小,舍弃后面的元素【选做】
- };
- //以下为类成员函数的定义
- //构造函数
- 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<<"invalidArraySize";
- exit(1);
- }
- size=sz;//将元素个数赋值给变量size
- arr=new int[size];//动态分配内存,将size个int类型的元素空间分配出来
- for(int i=0; i<size; ++i)
- *(arr+i)=*(a+i);
- }
- //析构函数
- MyArray::~MyArray(void)
- {
- delete []arr;
- }
- //复制构造函数
- 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::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;//返回当前对象的引用
- }
- //重载[]
- int &MyArray::operator[](int n)
- {
- if(n<0||n>size-1)
- {
- cout<<"indexOutOfRange"<<endl;
- exit(1);
- }
- return arr[n];
- }
- 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;//返回当前对象的引用
- }
- MyArray MyArray::operator + (MyArray& A)
- {
- int n=A.size; //取A数组的大小
- if (size!=n) //大小不一致不能相加
- {
- cout<<"not same size for add!"<<endl;
- exit(1);
- }
- MyArray a(n); //指定size的数组
- for (int i = 0; i < size; i++)
- {
- a[i]=arr[i]+A[i];
- }
- return a;//返回当前对象的引用
- }
- ostream& operator << (ostream& out, MyArray& A)
- {
- for (int i = 0; i < A.size; i++)
- {
- out<<A[i]<<'\t';
- }
- out<<endl;
- return out;
- }
- //取当前数组大小
- int MyArray::GetSize(void)const
- {
- return size;
- }
- //将数组大小修改为sz
- void MyArray::Resize(int sz)
- {
- if(sz<=0)
- {
- cout<<"invalidArraySize"<<endl;
- exit(1);
- }
- if(sz==size)
- return;
- int *newlist=new int[sz];
- for (int i = 0; i < sz; i++)
- {
- *(newlist+i)=0;
- }
- int n=(sz<=size)?sz:size;
- int *srcptr=arr;
- int *destptr=newlist;
- while(n--)
- {
- *destptr=*srcptr;
- destptr++;
- srcptr++;
- }
- delete []arr;
- 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<<arr3;
- arr3 = arr1 +arr2;
- cout<<arr3;
- arr3.Resize(20);
- cout<<arr3;
- arr3.Resize(5);
- cout<<arr3;
- system("pause");
- return 0;
- }
- 第十四周 任务一
- 第十四周 任务一
- 第十四周 任务一
- 第十四周任务一
- 第十四周任务一
- 第十四周任务(一)
- 第十四周任务(一)
- 第十四周任务(一)
- 第十四周实验报告(任务一)
- 第十四周实验报告 任务一
- 第十四周 任务二
- 第十四周 任务二
- 第十四周 任务二
- 第十四周任务1
- 第十四周任务三
- 第十四周任务3、
- C++程序设计实验报告(七十三)---第十四周任务一
- 第十四周上机任务项目一—数组大折腾
- <<探讨linux/unix>>之命令ls
- LINUX总结
- 笔记本USB转串口要求指定COM1端口号一例
- BrowserActivity
- sizeof(类)
- 第十四周任务一
- 每周一荐:Google的序列化框架Protobuf
- 12种JavaScript MVC框架之比较
- 大话编码
- 设计模式——简单工厂
- servlet应用之cookies&session操作
- Hibernate配置文件解析
- 定期任务的业务及其实现逻辑简单记录
- 快速排序<参考数据结构>