怎么在C++中實(shí)現(xiàn)數(shù)組類運(yùn)算-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)怎么在C++中實(shí)現(xiàn)數(shù)組類運(yùn)算,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的八公山網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

【項(xiàng)目-數(shù)組類運(yùn)算的實(shí)現(xiàn)】

設(shè)計(jì)數(shù)組類Array,為了實(shí)現(xiàn)測試函數(shù)中要求的功能,請補(bǔ)足相關(guān)的函數(shù)(構(gòu)造、析構(gòu)函數(shù))和運(yùn)算符重載的函數(shù)。

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

class Array
{
private:
  int* list;   //用于存放動態(tài)分配的數(shù)組內(nèi)存首地址
  int size;    //數(shù)組大?。ㄔ貍€(gè)數(shù))
public:
  //成員函數(shù)聲明
};
//要求測試函數(shù)能夠運(yùn)行出正確、合理的結(jié)果:
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;   //用于存放動態(tài)分配的數(shù)組內(nèi)存首地址
  int size;    //數(shù)組大?。ㄔ貍€(gè)數(shù))
public:
  Array(int sz = 50);   //構(gòu)造函數(shù)
  Array(int a[], int sz);   //構(gòu)造函數(shù)
  Array(const Array &a); //拷貝構(gòu)造函數(shù)
  ~Array();     //析構(gòu)函數(shù)
  Array operator + (const Array &a2);   //重載"="
  Array &operator = (const Array &a2);  //重載"="
  int &operator[] (int i); //重載"[]"
  const int &operator[] (int i) const;
  int getSize() const;    //取數(shù)組的大小
  void resize(int sz);    //修改數(shù)組的大小
  void show() const;
};
Array::Array(int sz) //構(gòu)造函數(shù)
{
  assert(sz >= 0);//sz為數(shù)組大小(元素個(gè)數(shù)),應(yīng)當(dāng)非負(fù)
  size = sz; // 將元素個(gè)數(shù)賦值給變量size
  list = new int [size]; //動態(tài)分配size個(gè)int類型的元素空間
}
Array::Array(int a[], int sz)
{
  assert(sz >= 0);//sz為數(shù)組大?。ㄔ貍€(gè)數(shù)),應(yīng)當(dāng)非負(fù)
  size = sz; // 將元素個(gè)數(shù)賦值給變量size
  list = new int [size]; //動態(tài)分配size個(gè)int類型的元素空間
  for (int i = 0; i < size; i++) //從對象X復(fù)制數(shù)組元素到本對象
    list[i] = a[i];
}
Array::~Array()  //析構(gòu)函數(shù)
{
  delete [] list;
}
//拷貝構(gòu)造函數(shù)
Array::Array(const Array &a)
{
  size = a.size; //從對象x取得數(shù)組大小,并賦值給當(dāng)前對象的成員
  //為對象申請內(nèi)存并進(jìn)行出錯檢查
  list = new int[size];  // 動態(tài)分配n個(gè)int類型的元素空間
  for (int i = 0; i < size; i++) //從對象X復(fù)制數(shù)組元素到本對象
    list[i] = a.list[i];
}
Array Array::operator + (const Array &a2)
{
  assert(size == a2.size);  //檢查下標(biāo)是否越界
  //如果本對象中數(shù)組大小與a2不同,則刪除數(shù)組原有內(nèi)存,然后重新分配
  Array total(size);
  for (int i = 0; i < size; i++)
    total.list[i] = list[i]+a2.list[i];
  return total;  
}
//重載"="運(yùn)算符,將對象a2賦值給本對象。實(shí)現(xiàn)對象之間的整體賦值
Array &Array::operator = (const Array& a2)
{
  if (&a2 != this)
  {
    //如果本對象中數(shù)組大小與a2不同,則刪除數(shù)組原有內(nèi)存,然后重新分配
    if (size != a2.size)
    {
      delete [] list; //刪除數(shù)組原有內(nèi)存
      size = a2.size; //設(shè)置本對象的數(shù)組大小
      list = new int[size];  //重新分配n個(gè)元素的內(nèi)存
    }
    //從對象X復(fù)制數(shù)組元素到本對象
    for (int i = 0; i < size; i++)
      list[i] = a2.list[i];
  }
  return *this;  //返回當(dāng)前對象的引用
}
//重載下標(biāo)運(yùn)算符,實(shí)現(xiàn)與普通數(shù)組一樣通過下標(biāo)訪問元素,并且具有越界檢查功能
int &Array::operator[] (int n)
{
  assert(n >= 0 && n < size); //檢查下標(biāo)是否越界
  return list[n];     //返回下標(biāo)為n的數(shù)組元素
}
//常對象時(shí),會調(diào)用這個(gè)函數(shù),運(yùn)算結(jié)果(引用)將不能再被賦值
const int &Array::operator[] (int n) const
{
  assert(n >= 0 && n < size); //檢查下標(biāo)是否越界
  return list[n];     //返回下標(biāo)為n的數(shù)組元素
}
//取當(dāng)前數(shù)組的大小
int Array::getSize() const
{
  return size;
}
//將數(shù)組大小修改為sz
void Array::resize(int sz)
{
  assert(sz >= 0);  //檢查sz是否非負(fù)
  if (sz == size) //如果指定的大小與原有大小一樣,什么也不做
    return;
  int* newList = new int [sz];  //申請新的數(shù)組內(nèi)存
  int n = (sz < size) ? sz : size;//將sz與size中較小的一個(gè)賦值給n
  //將原有數(shù)組中前n個(gè)元素復(fù)制到新數(shù)組中
  for (int i = 0; i < n; i++)
    newList[i] = list[i];
  delete[] list;   //刪除原數(shù)組
  list = newList; // 使list指向新數(shù)組
  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;
}

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站bm7419.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:怎么在C++中實(shí)現(xiàn)數(shù)組類運(yùn)算-創(chuàng)新互聯(lián)
瀏覽路徑:http://bm7419.com/article8/ddpiop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、App開發(fā)、外貿(mào)建站、品牌網(wǎng)站制作、動態(tài)網(wǎng)站網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司