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

水深无声 2021-06-10 20:41 392阅读 0赞

问题及代码:

  1. /*copyright(c)2016.烟台大学计算机学院
  2. * All rights reserved,
  3. * 文件名称:text.Cpp
  4. * 作者:李一波
  5. * 完成日期:2016年5月23日
  6. * 版本号:vc++6.0
  7. *
  8. * 问题描述:设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数(构造、析构函数)和运算符重载的函数。请注意引用的用法。
  9.   实现策略提示:可以将测试函数中的语句加上注释,取消一句的注释,增加相应的函数,以渐增地实现所有的功能,避免全盘考虑带来的困难。
  10. * 输入描述:
  11. * 程序输出:
  12. */
  13. #include <iostream>
  14. #include<assert.h>
  15. using namespace std;
  16. class Array
  17. {
  18. private:
  19. int* list; //用于存放动态分配的数组内存首地址
  20. int size; //数组大小(元素个数)
  21. public:
  22. //成员函数声明
  23. Array (int daxiao=50);
  24. Array(int a[],int daxiao);
  25. Array(const Array &a);
  26. Array &operator=(const Array &p);
  27. Array operator+(const Array &p);
  28. int &operator[](int i);
  29. const int &operator[](int i)const;
  30. int getSize() const;
  31. void resize(int daxiao);
  32. void show();
  33. ~Array();
  34. };
  35. Array::Array(int daxiao)
  36. {
  37. size=daxiao;
  38. list=new int [size];
  39. }
  40. Array::Array(int a[],int daxiao)
  41. {
  42. assert(daxiao>=0);
  43. list=new int[daxiao];
  44. size=daxiao;
  45. int i;
  46. for(i=0;i<size;i++)
  47. list[i]=a[i];
  48. }
  49. Array::Array(const Array &a)
  50. {
  51. int i;
  52. size=a.size;
  53. list=new int[size];
  54. for(i=0;i<size;i++)
  55. list[i]=a.list[i];
  56. }
  57. Array Array::operator+(const Array &p)
  58. {
  59. assert(size==p.size);
  60. int i;
  61. Array total=size;
  62. for (i = 0; i < size; i++)
  63. total.list[i] = list[i]+p.list[i];
  64. return total;
  65. }
  66. //重载"="运算符,将对象p赋值给本对象。实现对象之间的整体赋值
  67. Array &Array::operator=(const Array &p)
  68. {
  69. int i;
  70. if(&p!=this)
  71. {
  72. //如果本对象中数组大小与p不同,则删除数组原有内存,然后重新分配
  73. if(size!=p.size)
  74. {
  75. delete []list;
  76. size=p.size;
  77. list=new int[size];
  78. }
  79. for(i=0;i<size;i++)
  80. list[i]=p.list[i];
  81. }
  82. return *this;
  83. }
  84. //重载下标运算符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能
  85. int &Array::operator[](int i)
  86. {
  87. assert(i>=0&&i<size);
  88. return list[i];
  89. }
  90. const int &Array::operator[](int i)const
  91. {
  92. return list[i];
  93. }
  94. int Array::getSize()const
  95. {
  96. return size;
  97. }
  98. //将数组大小void Array::show()修改为daxiao
  99. void Array::resize(int daxiao)
  100. {
  101. assert(daxiao>=0);
  102. if(daxiao==size)
  103. return;
  104. int* newList = new int [daxiao]; //申请新的数组内存
  105. int n = (daxiao < size) ? daxiao : size;//将sz与size中较小的一个赋值给n
  106. //将原有数组中前n个元素复制到新数组中
  107. for (int i = 0; i < n; i++)
  108. newList[i] = list[i];
  109. delete[] list; //删除原数组
  110. list = newList; // 使list指向新数组
  111. size = daxiao; //更新size
  112. }
  113. void Array::show()
  114. {
  115. int i;
  116. for (i = 0; i < size; i++)
  117. cout<< list[i]<<" ";
  118. cout<<endl;
  119. }
  120. Array::~Array() //析构函数
  121. {
  122. delete [] list;
  123. }
  124. //要求测试函数能够运行出正确、合理的结果:
  125. int main()
  126. {
  127. int a[8]= {1,2,3,4,5,6,7,8};
  128. int b[8]= {10,20,30,40,50,60,70,80};
  129. Array array1(a,8),array3,array4;
  130. const Array array2(b,8);
  131. array4=array3=array1+array2;
  132. array3.show();
  133. array4.resize(20);
  134. array4[8]=99;
  135. cout<<array4[8]<<endl;
  136. cout<<array2[3]<<endl;
  137. return 0;
  138. }

运行结果:

Center

发表评论

表情:
评论列表 (有 0 条评论,392人围观)

还没有评论,来说两句吧...

相关阅读