第十二周项目三-数组类运算的实现
来源:互联网 发布:不属于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
- 第十二周项目三-数组类运算的实现
- 第十二周项目三-数组类运算的实现
- 第十二周项目三数组类运算的实现
- 第十二周项目 数组类运算的实现
- 第十二周项目3-数组类运算的实现
- 第十二周实践项目3-数组类运算的实现
- 第十二周项目3—数组类运算的实现
- 第十二周项目——数组类运算的实现
- 第十二周项目3-数组类运算的实现
- 第十二周项目3—数组类运算的实现
- 第十二周数组类运算的实现
- 第十二周-数组类运算的实现
- 第十二周项目三 数组类运算符重载
- 第十二周上机实践项目 项目3-数组类运算的实现
- 第十二周实践项目3————数组类的运算的实现
- 第十二周上机实践——项目3-数组类运算的实现
- 第十二周项目3——数组类运算的实现
- 第十二周上机实践项目3:数组类运算的实现
- Libgdx之Window Dialog 窗口和对话框
- 模板方法模式
- (补)虚数的运算一(成员函数中的函数运算符重载)
- c语言小知识点总结
- 小白笔记-------------------------openssl(ca)
- 第十二周项目三-数组类运算的实现
- ubuntu12.04 putty的安装
- 实现淘宝和QQ ToolBar透明渐变效果
- 虚表探索
- eclipse导入外部java程序时,中文部分出现乱码
- IOS开发收集整理(经典)
- ubuntu 12.04 桌面启动器
- fastJSON使用(一)——对象转换成json
- IOS xib封装自定义view 的封装步骤