中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C++中實現數組類運算

發布時間:2021-06-02 16:45:14 來源:億速云 閱讀:291 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關怎么在C++中實現數組類運算,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

設計數組類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;
}
//將數組大小修改為sz
void 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;
}

關于怎么在C++中實現數組類運算就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

八宿县| 安化县| 石阡县| 怀来县| 安平县| 达州市| 巴东县| 健康| 夹江县| 临泉县| 浪卡子县| 长乐市| 杂多县| 岢岚县| 苍山县| 华宁县| 正镶白旗| 泸定县| 左贡县| 青河县| 桦甸市| 西丰县| 金溪县| 云和县| 沂源县| 福清市| 曲阳县| 三穗县| 天门市| 嘉荫县| 泽普县| 富宁县| 获嘉县| 饶河县| 米脂县| 镇平县| 谢通门县| 信阳市| 本溪| 乐陵市| 纳雍县|