国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實踐數組類運算的實現參考

2020-01-26 13:31:44
字體:
來源:轉載
供稿:網友

【項目-數組類運算的實現】

設計數組類Array,為了實現測試函數中要求的功能,請補足相關的函數(構造、析構函數)和運算符重載的函數。

實現策略提示:可以將測試函數中的語句加上注釋,取消一句的注釋,增加相應的函數,以漸增地實現所有的功能,避免全盤考慮帶來的困難。

class Array{private:  int* list;   //用于存放動態分配的數組內存首地址  int size;    //數組大小(元素個數)public:  //成員函數聲明};//要求測試函數能夠運行出正確、合理的結果: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;}

[參考解答]

#include <iostream>#include <iomanip>#include <cassert>using namespace std;class Array{private:  int* list;   //用于存放動態分配的數組內存首地址  int size;    //數組大小(元素個數)public:  Array(int sz = 50);   //構造函數  Array(int a[], int sz);   //構造函數  Array(const Array &a); //拷貝構造函數  ~Array();     //析構函數  Array operator + (const Array &a2);   //重載"="  Array &operator = (const Array &a2);  //重載"="  int &operator[] (int i); //重載"[]"  const int &operator[] (int i) const;  int getSize() const;    //取數組的大小  void resize(int sz);    //修改數組的大小  void show() const;};Array::Array(int sz) //構造函數{  assert(sz >= 0);//sz為數組大小(元素個數),應當非負  size = sz; // 將元素個數賦值給變量size  list = new int [size]; //動態分配size個int類型的元素空間}Array::Array(int a[], int sz){  assert(sz >= 0);//sz為數組大小(元素個數),應當非負  size = sz; // 將元素個數賦值給變量size  list = new int [size]; //動態分配size個int類型的元素空間  for (int i = 0; i < size; i++) //從對象X復制數組元素到本對象    list[i] = a[i];}Array::~Array()  //析構函數{  delete [] list;}//拷貝構造函數Array::Array(const Array &a){  size = a.size; //從對象x取得數組大小,并賦值給當前對象的成員  //為對象申請內存并進行出錯檢查  list = new int[size];  // 動態分配n個int類型的元素空間  for (int i = 0; i < size; i++) //從對象X復制數組元素到本對象    list[i] = a.list[i];}Array Array::operator + (const Array &a2){  assert(size == a2.size);  //檢查下標是否越界  //如果本對象中數組大小與a2不同,則刪除數組原有內存,然后重新分配  Array total(size);  for (int i = 0; i < size; i++)    total.list[i] = list[i]+a2.list[i];  return total;  }//重載"="運算符,將對象a2賦值給本對象。實現對象之間的整體賦值Array &Array::operator = (const Array& a2){  if (&a2 != this)  {    //如果本對象中數組大小與a2不同,則刪除數組原有內存,然后重新分配    if (size != a2.size)    {      delete [] list; //刪除數組原有內存      size = a2.size; //設置本對象的數組大小      list = new int[size];  //重新分配n個元素的內存    }    //從對象X復制數組元素到本對象    for (int i = 0; i < size; i++)      list[i] = a2.list[i];  }  return *this;  //返回當前對象的引用}//重載下標運算符,實現與普通數組一樣通過下標訪問元素,并且具有越界檢查功能int &Array::operator[] (int n){  assert(n >= 0 && n < size); //檢查下標是否越界  return list[n];     //返回下標為n的數組元素}//常對象時,會調用這個函數,運算結果(引用)將不能再被賦值const int &Array::operator[] (int n) const{  assert(n >= 0 && n < size); //檢查下標是否越界  return list[n];     //返回下標為n的數組元素}//取當前數組的大小int Array::getSize() const{  return size;}//將數組大小修改為szvoid Array::resize(int sz){  assert(sz >= 0);  //檢查sz是否非負  if (sz == size) //如果指定的大小與原有大小一樣,什么也不做    return;  int* newList = new int [sz];  //申請新的數組內存  int n = (sz < size) ? sz : size;//將sz與size中較小的一個賦值給n  //將原有數組中前n個元素復制到新數組中  for (int i = 0; i < n; i++)    newList[i] = list[i];  delete[] list;   //刪除原數組  list = newList; // 使list指向新數組  size = sz; //更新size}void Array::show() const{  for (int i = 0; i < size; i++)    cout<< list[i]<<" ";  cout<<endl;}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;}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尉犁县| 延边| 南丹县| 深州市| 阿鲁科尔沁旗| 衡水市| 勐海县| 海安县| 吐鲁番市| 修水县| 禹州市| 永修县| 通榆县| 定边县| 桂平市| 乐清市| 宜兰县| 长沙县| 申扎县| 盖州市| 六枝特区| 洪江市| 镇雄县| 棋牌| 万全县| 柳河县| 沁源县| 新闻| 文安县| 天全县| 黑龙江省| 开化县| 涿鹿县| 彭山县| 弋阳县| 璧山县| 息烽县| 弋阳县| 观塘区| 云阳县| 宜兴市|