第十四周 任务一

古城微笑少年丶 2022-06-12 12:13 334阅读 0赞
  1. /* (程序头部注释开始)
  2. * 程序的版权和版本声明部分
  3. * Copyright (c) 2011, 烟台大学计算机学院学生
  4. * All rights reserved.
  5. * 文件名称:建立专门的数组类处理有关数组的操作
  6. * 作 者: 薛广晨
  7. * 完成日期: 2012 年 05 月18 日
  8. * 版 本 号: x1.0
  9. * 对任务及求解方法的描述部分
  10. * 输入描述:
  11. * 问题描述:数组是几乎所支持的组织数据的方法。C和C++对数组类型提供了内置支持,使我们利用数组实现软件中需要的各种实用的功能。但是,这种支持仅限于用来读写单个元素的机制。C++不支持数组的抽象abstraction,也不支持对整个数组的操作。例如:把一个数组赋值给另外一个数组,对两个数组进行相等比较或者想知道数组的大小size,等等。对C++而言,数组是从C语言中继承来的,它反映了数据与对其进行操作的算法的分离,有浓厚的过程化程序设计的特征。数组并不是C++语言的一等公民。所以在实际项目中,对一个C++程序员,更多的是使用标准库中提供的Vector类型实现数组功能。这个任务也将从面向对象角度重新审视和理解数组,进而扫清自学Vector等标准类中可能存在的障碍。在下面代码的基础上,完成支持数组操作的类的设计,增强C++内置数组类型功能。
  12. 在下面代码的基础上,完成支持数组操作的类的设计,增强C++内置数组类型功能。
  13. * 程序头部的注释结束
  14. */
  15. #include <iostream>
  16. using namespace std;
  17. class MyArray
  18. {
  19. private:
  20. int *arr; //用于存放动态分配的数组内存首地址
  21. int size; //数组大小
  22. public:
  23. MyArray(int sz=50);
  24. MyArray(int a[],int sz); //由一个内置类型的数组初始化
  25. MyArray(const MyArray &A); //拷贝构造函数
  26. ~MyArray(void); //析构函数,注意释放空间
  27. MyArray&operator =(const MyArray &A); //重载“=”使得数组对象可以整体赋值
  28. int& operator[](int i); //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
  29. bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
  30. MyArray operator + (MyArray& A); //重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
  31. friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组
  32. int GetSize(void)const; //取数组大小;
  33. void Resize(int sz); //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】
  34. };
  35. MyArray::MyArray(int sz)
  36. {
  37. arr = new int[sz];
  38. size=sz;
  39. for(int i=0;i<sz;i++)
  40. arr[i]=0;
  41. }
  42. MyArray::MyArray(int a[],int sz)
  43. {
  44. arr = new int[sz];
  45. for (int i = 0; i < sz; ++i)
  46. *(arr + i) = *(a + i); //将数组arr中元素逐个赋值
  47. size = sz;
  48. }
  49. MyArray::MyArray(const MyArray &A) //拷贝构造函数
  50. {
  51. arr = new int[A.size];
  52. for (int i = 0; i < A.size; ++i)
  53. *(arr + i) = *(A.arr + i); //将数组arr中元素逐个赋值
  54. size = A.size;
  55. }
  56. MyArray::~MyArray(void) //析构函数,注意释放空间
  57. {
  58. delete [] arr;
  59. }
  60. MyArray &MyArray::operator =(const MyArray &A) //重载“=”使得数组对象可以整体赋值
  61. {
  62. arr = new int[A.size];
  63. for(int i = 0; i < A.size; ++i)
  64. *(arr + i) = *(A.arr + i); //将数组arr中元素逐个赋值
  65. size = A.size;
  66. return *this;
  67. }
  68. int &MyArray:: operator[](int i) //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
  69. {
  70. if(i > size)
  71. {
  72. cout << "数组角标越界" << endl;
  73. exit(0);
  74. }
  75. else
  76. {
  77. return *(arr + i);
  78. }
  79. }
  80. bool MyArray::operator == (MyArray& A) //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
  81. {
  82. if(size == A.size)
  83. {
  84. for(int i = 0; i < size; i++)
  85. {
  86. if(arr[i] != A.arr[i])
  87. return false;
  88. }
  89. return true;
  90. }
  91. else return false;
  92. }
  93. MyArray MyArray::operator + (MyArray& A) //重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
  94. {
  95. MyArray My(A);
  96. if(size != A.size)
  97. {
  98. cout << "数组元素个数不同,无法相加。" << endl;
  99. return NULL;
  100. }
  101. else
  102. {
  103. for(int i = 0; i < size; ++i)
  104. {
  105. *(My.arr + i) = *(arr + i) + *(A.arr+i);
  106. }
  107. return My;
  108. }
  109. }
  110. ostream& operator << (ostream& out,MyArray& A) //重载<<,输出数组
  111. {
  112. for(int i = 0; i < A.size; i++)
  113. {
  114. out << *(A.arr + i) << " ";
  115. }
  116. out << endl;
  117. return out;
  118. }
  119. int MyArray::GetSize(void)const //取数组大小;
  120. {
  121. return size;
  122. }
  123. void MyArray::Resize(int sz) //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】
  124. {
  125. int *m,i;
  126. m = new int[sz];
  127. if(sz > size)
  128. {
  129. for( i = 0; i < size; ++i)
  130. *(m + i) = *(arr + i);
  131. for(i = size; i < sz; ++i)
  132. *(m + i) = 0;
  133. }
  134. else
  135. {
  136. for(i = 0; i < sz; ++i)
  137. *(m + i) = *(arr + i);
  138. }
  139. arr = new int[sz];
  140. for(i = 0;i < sz; ++i)
  141. *(arr + i) = *(m + i);
  142. size = sz;
  143. }
  144. int main()
  145. {
  146. int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  147. int b[10]={4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
  148. MyArray arr1(a,10);
  149. MyArray arr2(b,10);
  150. MyArray arr3(10);
  151. cout << arr3;
  152. arr3 = arr1 + arr2;
  153. cout << arr3;
  154. arr3.Resize(20);
  155. cout << arr3;
  156. cout << arr3[5] << endl;
  157. arr3.Resize(5);
  158. cout << arr3;
  159. system("pause");
  160. return 0;
  161. }

上机感言:增强lC++内置数组类型功能之后,对数组操作就简单了,很爽

1337342182_8339.jpg

发表评论

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

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

相关阅读

    相关 四周 任务

    /设计一个工资类(Salary),其中的数据成员有:double型数组salary[50](实际人数可以少于50,固定取50可能造成空间浪费),整型值number表示的

    相关 四周 任务

    //设计一个“正整数”类,并通过一系列的成员函数对其性质进行做出判断或列出相关联的数值。下面给出类声明,请实现各成员函数。另外,模仿已经给出的main()函数,完成你所