狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

面向對象程序設計課程實驗報告

| 瀏覽次數:

 課

  程

  實

  驗

  報

  告

  課程名稱:

 面向對象程序設計

 院 院

 系 :

 專業班級 :

 學

 號 :

 姓

 名 :

  指導教師 :

 目 目

 錄 實驗一. . 面向過程的整型棧編程 ....................................................................................... 0

 1. 需求分析 ....................................................................................................................... 0

 1 1.1 題目要求 .................................................................................................................... 0

 2 1.2 需求分析 .................................................................................................................... 0

 2. 系統設計 ....................................................................................................................... 1

 1 2.1 概要設計 .................................................................................................................... 1

 2 2.2 詳細設計 .................................................................................................................... 2

 4. 軟件測試 ....................................................................................................................... 3

 5. 特點與不足 ................................................................................................................... 3

 1 5.1 技術特點 .................................................................................................................... 3

 2 5.2 不足和改進的建議 ..................................................................................................... 4

 6. 過程和體會 ................................................................................................................... 4

 1 6.1 遇到的主要問題和解決方法 ...................................................................................... 4

 2 6.2 課程設計的體會 ......................................................................................................... 4

 7. 源碼和說明 ................................................................................................................... 4

 1 7.1 文件清單及其功能說明 .............................................................................................. 4

 2 7.2 用戶使用說明書 ......................................................................................................... 4

 3 7.3 源代碼 ........................................................................................................................ 4

 實驗二. . 面向對象的整型棧編程 ..................................................................................... 11

 1. 需求分析 ..................................................................................................................... 11

 1 1.1 題目要求 .................................................................................................................. 11

 2 1.2 需求分析 .................................................................................................................. 11

 2. 系統設計 ..................................................................................................................... 12

 1 2.1 概要設計 .................................................................................................................. 12

 2 2.2 詳細設計 .................................................................................................................. 12

 3. 軟件開發 ..................................................................................................................... 13

 4. 軟件測試 ..................................................................................................................... 13

 5. 特點與不足 ................................................................................................................. 13

 1 5.1 技術特點 .................................................................................................................. 13

 2 5.2 不足和改進的建議 ................................................................................................... 14

 6. 過程和體會 ................................................................................................................. 14

 1 6.1 遇 到的主要問題和解決方法 .................................................................................... 14

 2 6.2 課程設計的體會 ....................................................................................................... 14

 7. 源碼和說明 ................................................................................................................. 14

 1 7.1 文件清單及其功能說明 ............................................................................................ 14

 2 7.2 用戶使用說明書 ....................................................................................................... 14

 3 7.3 源代碼 ...................................................................................................................... 14

 實驗三. . 基于算符重載的整型棧編程 .............................................................................. 18

 1. 需求分析 ..................................................................................................................... 18

 1 1.1 題目要求 .................................................................................................................. 18

 2 1.2 需求分析 .................................................................................................................. 18

 2. 系統設計 ..................................................................................................................... 19

 1 2.1 概要設計 .................................................................................................................. 19

 2 2.2 詳細設計 .................................................................................................................. 19

 3. 軟件開發 ..................................................................................................................... 19

 4. 軟件測試 ..................................................................................................................... 19

 5. 特點與不足 ................................................................................................................. 20

 1 5.1 技術特點 .................................................................................................................. 20

 2 5.2 不足和改進的建議 ................................................................................................... 20

 6. 過程和體會 ................................................................................................................. 20

 1 6.1 遇到的主要問題和解決方法 .................................................................................... 20

 2 6.2 課 程設計的體會 ....................................................................................................... 20

 7. 源碼和說明 ................................................................................................................. 20

 1 7.1 文件清單及其功能說明 ............................................................................................ 20

 2 7.2 用戶使用說明書 ....................................................................................................... 20

 3 7.3 源代碼 ...................................................................................................................... 20

 實驗四. . 面向對象的整型隊列編程 ................................................................................ 24

 1. 需求分析 ..................................................................................................................... 24

 1 1.1 題目要求 .................................................................................................................. 24

 2 1.2 需求分析 .................................................................................................................. 24

 2. 系統設計 ..................................................................................................................... 25

 3. 軟件 開發 ..................................................................................................................... 25

 4. 軟件測試 ..................................................................................................................... 25

 5. 特點與不足 ................................................................................................................. 25

 1 5.1 技術特點 .................................................................................................................. 25

 2 5.2 不足和改進的建議 ................................................................................................... 25

 6. 過程和體會 ................................................................................................................. 25

 1 6.1 遇到的主要問題和解決方法 .................................................................................... 25

 2 6.2 課程設計的體會 ....................................................................................................... 26

 7. 源碼和說明 ................................................................................................................. 26

 1 7.1 文件清單及其功能說明 ............................................................................................ 26

 2 7.2 用戶使用說明書 ....................................................................................................... 26

 3 7.3 源代碼 ...................................................................................................................... 26

 實驗五. . 基于組合的整型隊列編程 ................................................................................ 30

 1. 需求分析 ..................................................................................................................... 30

 1 1.1 題目要求 .................................................................................................................. 30

 2 1.2 需求分析 .................................................................................................................. 30

 2. 系統設計 ..................................................................................................................... 30

 3. 軟件開發 ..................................................................................................................... 31

 4. 軟件測試 ..................................................................................................................... 31

 5. 特點與不足 ................................................................................................................. 31

 1 5.1 技術特點 .................................................................................................................. 31

 2 5.2 不足和改進的建議 ................................................................................................... 31

 6. 過程和體會 ................................................................................................................. 31

 1 6.1 遇到的主要問題和解決方法 .................................................................................... 31

 2 6.2 課程設計的體會 ....................................................................................................... 31

 7. 源碼和說明 ................................................................................................................. 32

 1 7.1 文件清單及其功能說明 ............................................................................................ 32

 2 7.2 用戶使用說明書 ....................................................................................................... 32

 3 7.3 源代碼 ...................................................................................................................... 32

 實驗六. . 基于繼承的整型隊列編程 ................................................................................ 36

 1. 需求分析 ..................................................................................................................... 36

 1 1.1 題目要求 .................................................................................................................. 36

 2 1.2 需求分析 .................................................................................................................. 37

 2. 系統設計 ..................................................................................................................... 37

 3. 軟件開發 ..................................................................................................................... 37

 4. 軟件測試 ..................................................................................................................... 37

 5. 特點與不足 ................................................................................................................. 37

 1 5.1 技術特點 .................................................................................................................. 37

 2 5.2 不足和改進的建議 ................................................................................................... 37

 6. 過程和體會 ................................................................................................................. 38

 1 6.1 遇到的主要問題和解決方法 .................................................................................... 38

 2 6.2 課程設計的體會 ....................................................................................................... 38

 7. 源碼和說明 ................................................................................................................. 38

 1 7.1 文件清單及其功能說明 ............................................................................................ 38

 2 7.2 用戶使用說明書 ....................................................................................................... 38

 3 7.3 源代碼 ...................................................................................................................... 38

 實驗一.面向過程的整型棧編程 1. 需求分析

 1 1.1 題目要求

 整型棧是一種先進后出的存儲結構,對其進行的操作通常包括判斷棧是否為空、向棧頂添加一個整型元素、出棧等。整型棧類型及其操作函數采用非面向對象的純 C 語言定義,請將完成上述操作的所有函數采用面向過程的方法編程, 然后寫一個 main 函數對棧的所有操作函數進行測試。

 struct STACK{

  int

 *elems; //申請內存用于存放棧的元素

  int

  max;

 //棧能存放的最大元素個數

  int

  pos;

 //棧實際已有元素個數,棧空時 pos=0; }; void initSTACK(STACK *const p, int m);//初始化 p 指空棧:可存 m 個元素 void initSTACK(STACK *const p, const STACK&s); //用 s 初始化 p 指空棧 int

 size (const STACK *const p); //返回 p 指的棧的最大元素個數 max int

 howMany (const STACK *const p); //返回p指的棧的實際元素個數pos int

 getelem (const STACK *const p, int x); //取下標 x 處的棧元素 STACK *const push(STACK *const p, int e);

 //將 e 入棧,并返回 p STACK *const pop(STACK *const p, int &e); //出棧到 e,并返回 p STACK *const assign(STACK*const p, const STACK&s);//賦給 p 指棧,返回 p void print(const STACK*const p);

  //打印 p 指向的棧元素 void destroySTACK(STACK*const p);

 //銷毀 p 指向的棧,釋放 2 1.2 需求分析

 本實驗需要實現棧的功能的操作,如元素的進棧,連續進棧,出棧和連續出棧,所以需要設計兩個棧,在完成初始化后直接在程序里給定棧內元素。

 2. 系統設計

 1 2.1 概要設計

 函數結構圖見圖 1.1 棧初始化棧返回max,pos取棧內元素入棧、出棧打印棧銷毀棧圖 1.1 總體流程圖見圖 1.2 開始初始化是否繼續入棧是否繼續出棧銷毀棧結束YNYN 圖 1.2

 2 2.2 詳細設計

 void initSTACK(STACK *const p, int m) 入口參數:int m 出口參數:無 功能:初始化棧,可存 m 個元素

 void initSTACK(STACK *const p, const STACK&s) 入口參數:const STACK&s 出口參數:無 功能:用 s 初始化 p 指空棧 int

 size (const STACK *const p)

 入口參數:無 出口參數:int max 功能:返回 p 指的棧的最大元素個數 max int

 howMany (const STACK *const p)

 入口參數:無 出口參數:int pos 功能:返回 p 指的棧的實際元素個數 pos int

 getelem (const STACK *const p, int x)

 入口參數:int x 出口參數:elem[m] 功能:取下標 x 處的棧元素 STACK *const push(STACK *const p, int e)

 入口參數:int e 出口參數:(*this) 功能:將 e 入棧,并返回 p STACK *const pop(STACK *const p, int &e)

 入口參數:int &e 出口參數:(*this) 功能:出棧到 e,并返回 p STACK *const assign(STACK*const p, const STACK&s)

 入口參數:STACK&s 出口參數:(*this) 功能:賦 s 給 p 指棧,返回 p void print(const STACK*const p)

 入口參數:無 出口參數:無 功能:打印 p 指向的棧元素 void destroySTACK(STACK*const p)

 入口參數:

 出口參數:

 功能:銷毀 p 指向的棧,釋放 3. 軟件開發

 在 Codeblocks 編譯環境下,使用 C++語言編寫。

 4. 軟件測試

 測試結果見圖 1.3

 圖 1.3 5. 特點與不足

 1 5.1 技術特點

 完成了實驗的所有要求,沒有錯誤的地方。

 2 5.2 不足和改進的建議

 沒有做人機交互界面,無法自由選擇入棧的數據;同時注釋較少,對于程序不了解的人可能需要花費更多時間去了解。

 6. 過程和體會

 1 6.1 遇到的主要問題和解決方法

 輸出結果數字與預計不同,檢查后發現原因是變量初始值未設置。

 2 6.2 課程設計的體會

 本次實驗主要還是通過回顧 C 語言中棧的知識完成在 C++上的編程,所以總體過程沒有出現太大的問題;同時也對 const 變量有了進一步的認識。

 7. 源碼和說明

 1 7.1 文件清單及其功能說明

 experiment1.cpp 源碼 experiment1.exe 可執行文件。

 2 7.2 用戶使用說明書

 experiment1.cpp 是程序的源碼,可通過修改其中 main 函數中的變量來測試各個函數。

 3 7.3 源代碼

 #include<stdio.h> #include<malloc.h> #include<stdlib.h>

 struct STACK {

  int

 *elems; //申請內存用于存放棧的元素

  int

  max;

  //棧能存放的最大元素個數

  int

  pos;

  //棧實際已有元素個數,棧空時 pos=0;

 }; void initSTACK(STACK *const p, int m); //初始化 p 指向的棧:最多 m 個元素 void initSTACK(STACK *const p, const STACK&s); //用棧 s 初始化 p 指向的棧 int

 size (const STACK *const p);

 //返回 p 指向的棧的最大元素個數 max int

 howMany (const STACK *const p); //返回 p 指向的棧的實際元素個數 pos int

 getelem (const STACK *const p, int x); //取下標 x 處的棧元素 STACK *const push(STACK *const p, int e);

 //將 e 入棧,并返回 p STACK *const pop(STACK *const p, int &e);

 //出棧到 e,并返回 p STACK *const assign(STACK*const p, const STACK&s); //賦 s 給 p 指的棧,并返回 p void print(const STACK*const p);

  //打印 p 指向的棧 void destroySTACK(STACK*const p);

 //銷毀 p 指向的棧

 int main(int argc, char* argv[]) {

  STACK *s1 = (STACK *)malloc(sizeof(STACK));

  STACK *s2 = (STACK *)malloc(sizeof(STACK));

  initSTACK(s1,10);

 push(s1,1);

  push(s1,2);

  push(push(s1,3),4);

  initSTACK(s2,*s1);

 print(s2);

  printf("棧 s1:\n");

  print(s1);

  //assign(s2,*s1);

  printf("棧 s2:\n");

  print(s2);

 int a,b,c;

  a = size(s1);

  printf("棧的最大元素個數是 %d\n",a);

  b =

 howMany(s1);

  printf("棧的實際元素個數是 %d\n",b);

  c =

 getelem(s1,3);

  printf("3 處棧元素是是%d\n",c);

  int x,y,z;

  pop(s2,x);

  pop(pop(s2,y),z);

  printf("x= %d, y= %d, z= %d \n",x,y,z);

  destroySTACK(s2);

  destroySTACK(s1);

  getchar();

  return 0; }

 void initSTACK(STACK *const p, int m) //初始化 p 指向的棧:最多 m個元素 {

  p->elems = (int*)malloc(m*sizeof(int*));

  if(!p->elems)

  return;

  p->pos = 0;

  p->max = m;

  int i;

  for(i=0;i<(p->max);i++)

  p->elems[i] = 0; }

 void initSTACK(STACK *const p, const STACK&s) //用棧 s 初始化 p 指向的棧 {

  p->elems = (int*)malloc((s.max)*sizeof(int));

  p->pos = s.pos;

 p->max = s.max;

  int i;

  for(i=0;i<(s.pos);i++)

  {

  p->elems[i]=s.elems[i];

  printf("%d\n",p->elems[i]);

  } }

 int

 size (const STACK *const p)

 //返回 p 指向的棧的最大元素個數 max {

  return p->max; }

 int

 howMany (const STACK *const p) //返回 p 指向的棧的實際元素個數 pos {

  return p->pos; }

 int

 getelem (const STACK *const p, int x) //取下標 x 處的棧元素 {

  if(p==NULL)

  return NULL;

  else

  {

  if(x>(p->pos))

  printf("不存在元素\n");

  else

  return p->elems[x];

  } }

 STACK *const push(STACK *const p, int e)

 //將 e 入棧,并返回 p {

 if(p==NULL)

  return NULL;

  else

  {

  if((p->pos)<=(p->max))

  {

  p->elems[p->pos]=e;

  p->pos++;

  return p;

  }

  else

  printf("棧滿\n");

  } }

 STACK *const pop(STACK *const p, int &e)

 //出棧到 e,并返回 p {

  if(p==NULL)

  return NULL;

  else

  {

  if((p->pos)==0)

  printf("棧為空\n");

  else

  {

  e=p->elems[(p->pos)-1];

  (p->pos)--;

  return p;

  }

  } }

  STACK *const assign(STACK*const p, const STACK&s) //賦 s 給 p 指的棧,并返回 p {

  if(p==NULL || &s==NULL)

  {

  return NULL;

  }

  else

  {

  free(p->elems);

  //free(p);

  //STACK *p = (STACK *)malloc(sizeof(STACK));

  initSTACK(p,s);

  return p;

  } }

 void print(const STACK*const p)

  //打印 p 指向的棧 {

  int i;

  if(p == NULL)

  {

  return;

  }

  else if(p->pos == 0)

  {

  printf("棧為空\n");

  }

  else

  {

  for(i=0;i<(p->pos);i++)

  {

  printf("%d ",p->elems[i]);

  }

 printf("\n");

  } }

 void destroySTACK(STACK*const p) //銷毀 p 指向的棧 {

  free(p->elems);

  free(p);

  printf("棧已銷毀\n"); }

 實驗二.面向對象的整型棧編程

 1. 需求分析

 1 1.1 題目要求

 整型棧是一種先進后出的存儲結構,對其進行的操作通常包括判斷棧是否為空、向棧頂添加一個整型元素、出棧等。整型棧類型及其操作函數采用面向對象的 C++語言定義,請將完成上述操作的所有函數采用 C++編程, 然后寫一個 main 函數對棧的所有操作函數進行測試。

 class STACK{

  int

 *const

 elems; //申請內存用于存放棧的元素

  const

 int

  max; //棧能存放的最大元素個數

  int

  pos;

  //棧實際已有元素個數,棧空時 pos=0; public: STACK(int m);

 //初始化棧:最多 m 個元素 STACK(const STACK&s); //用棧 s 拷貝初始化棧 int

 size ( ) const;

 //返回棧的最大元素個數 max int

 howMany ( ) const; //返回棧的實際元素個數 pos int

 getelem (int x) const; //取下標 x 處的棧元素 STACK& push(int e);

 //將 e 入棧,并返回棧 STACK& pop(int &e);

 //出棧到 e,并返回棧 STACK& assign(const STACK&s); //賦 s 給棧,并返回被賦值的棧 void print( ) const;

 //打印棧 ~STACK( );

 //銷毀棧 }; 2 1.2 需求分析

 采用面向對象的 C++語言定義整型棧,對其進行的操作通常包括判斷棧是否為空、向棧頂添加一個整型元素、出棧等。

 2. 系統設計

 1 2.1 概要設計

 首先需要定義一個類來實現棧,然后依次實現棧的各個功能,在主函數中給定一個棧然后,然后通過函數調用實現棧的功能。

 2 2.2 詳細設計

 STACK(int m)

 功能:初始化棧:最多 m 個元素 返回值:無

 STACK(const STACK&s)

 功能:用棧 s 拷貝初始化棧 返回值:無

 int

 size ( ) const 功能:返回棧的最大元素個數 max 返回值:最大元素個數 max

 int

 howMany ( ) const 功能:返回棧的實際元素個數 pos 返回值:元素數目 pos

 int

 getelem (int x) const

 功能:取下標 x 處的棧元素 返回值:下標為 x 的元素

 STACK& push(int e) 功能:將 e 入棧 返回值:棧的引用

 STACK& pop(int &e) 功能:出棧到 e,并返回棧 返回值:棧的引用

  STACK& assign(const STACK&s)

 功能:使用棧 s 給棧 p 賦值 返回值:棧的引用

 void print( ) const 功能:打印棧 返回值:無

 ~STACK( )

 功能:銷毀棧 返回值:無 3. 軟件開發

 在 Codeblocks 編譯環境下,使用 C++語言編寫。

 4. 軟件測試

 測試結果見圖 2.1

 圖 2.1 5. 特點與不足

 1 5.1 技術特點

 完成了初定目標,無其他特點。

 2 5.2 不足和改進的建議

 人機交互需要進一步完善。

 6. 過程和體會

 1 6.1 遇到的主要問題和解決方法

 由于第一次使用 c++面向對象編寫程序,開始不明白對象的生成及使用。在和同學老師的溝通和交流中,慢慢學會了編程的方法。

 2 6.2 課程設計的體會

 C++語言與 C 語言有很多相通的地方,所以其中的某些原理和方法可以互相借鑒,這樣就減少了在理解上的難度。

 7. 源碼和說明

 1 7.1 文件清單及其功能說明

 experiment2.cpp 源碼 experiment2.exe 可執行文件。

 2 7.2 用戶使用說明書

 experiment2.cpp 是程序的源碼,可通過修改其中 main 函數中的變量來測試各個函數。

 3 7.3 源代碼

 #include <iostream> #include <string> using namespace std; class STACK{

  int

 *const

 elems; //申請內存用于存放棧的元素

  const

 int

  max; //棧能存放的最大元素個數

  int

  pos;

  //棧實際已有元素個數,棧空時 pos=0; public: STACK(int m);

 //初始化棧:最多 m 個元素

 STACK(const STACK&s); //用棧 s 拷貝初始化棧 int

 size ( ) const;

 //返回棧的最大元素個數 max int

 howMany ( ) const; //返回棧的實際元素個數 pos int

 getelem (int x) const; //取下標 x 處的棧元素 STACK& push(int e);

 //將 e 入棧,并返回棧 STACK& pop(int &e);

 //出棧到 e,并返回棧 STACK& assign(const STACK&s); //賦 s 給棧,并返回被賦值的棧 void print( ) const;

 //打印棧 ~STACK( );

 //銷毀棧 }; STACK::STACK(int m):elems(new int[m]),max(m),pos(0){} STACK::STACK(const STACK&s):elems(new int[s.size()]),max(s.size()),pos(s.howMany()) {

  for(int i=0;i<pos;i++)

  elems[i]=s.getelem(i);

  cout<<"復制構造成功"<<endl; }; int STACK::size() const {

 return max; } int STACK::howMany() const {

 return pos; } int STACK::getelem (int x) const {

 return elems[x]; } STACK& STACK::push(int e) {

 if(pos<max)

 {

  elems[pos]=e;

 pos++;

 }

 else cout<<"full\n";

 return *this; } STACK& STACK::pop(int &e){

  if(pos==0)

  {

  cout<<"empty stack";return *this;

  }

  pos--;

  e = elems[pos];

  cout<<"出棧成功";

  return *this; } STACK& STACK::assign(const STACK&s){

  int i;

  delete elems; //

 elems = new int [s.size()]; //

 max = s.size();

  pos = s.howMany();

  for(i=0;i<s.howMany();i++)

  { elems[i] = s.getelem(i);}

  return *this; } void STACK::print( ) const{

  int i;

  cout<<"棧的元素為:";

  for(i=0;i<pos;i++)

  cout<<elems[i]<<"

  ";

  cout<<endl; } STACK::~STACK(){

  delete elems; //

 elems= 0;

  //

  max = 0;

  pos = 0;

  cout<<"析構完成"; } int main() {

  STACK s(7);

  s.push(5);

  s.push(7);

  s.push(9);

  s.push(11);

  s.print();

  int i;

  s.pop(i);

  cout<<"出棧元素"<<i<<endl;

  STACK p(s);

  cout<<"容量"<<p.size()<<endl;

  cout<<"當前元素數目"<<p.howMany(); }

 實驗三.基于算符重載的整型棧編程

 1. 需求分析

 1 1.1 題目要求

 整型棧是一種先進后出的存儲結構,對其進行的操作通常包括判斷棧是否為空、向棧頂添加一個整型元素、出棧等。整型棧類型及其操作函數采用面向對象的 C++語言定義,請將完成上述操作的所有函數采用 C++編程, 然后寫一個 main 函數對棧的所有操作函數進行測試。

 class STACK{

  int

 *const

 elems; //申請內存用于存放棧的元素

  const

 int

  max; //棧能存放的最大元素個數

  int

  pos;

  //棧實際已有元素個數,棧空時 pos=0; public: STACK(int m);

 //初始化棧:最多 m 個元素 STACK(const STACK&s);

 //用棧 s 拷貝初始化棧 virtual int

 size ( ) const;

 //返回棧的最大元素個數 max virtual operator int ( ) const; //返回棧的實際元素個數 pos virtual int operator[ ] (int x) const;//取下標 x 處的棧元素 virtual STACK& operator<<(int e);

 //將 e 入棧,并返回棧 virtual STACK& operator>>(int &e); //出棧到 e,并返回棧 virtual STACK& operator=(const STACK&s);//賦 s 給棧,并返回被賦值的棧 virtual void print( ) const;

  //打印棧 virtual ~STACK( );

  //銷毀棧 }; 2 1.2 需求分析

 采用面向對象的 C++語言定義,構建整型棧并對其進行判斷棧是否為空、向棧頂添加一個整型元素、出棧等操作。

 2. 系統設計

 1 2.1 概要設計

 首先需要定義一個類來實現棧,然后依次實現棧的各個功能,在主函數中給定一個棧然后,然后通過函數調用實現棧的功能。

 2 2.2 詳細設計

 初始化定義一個類,分配一個數組空間來存儲棧內元素信息,然后初始化為 0;

  實現入棧則需要將入棧元素 e 放入棧內,采用了先判斷棧的最大容量夠不夠的問題,如果不夠重新分配空間,并且讓 e 入棧,將當前元素 pos 加一;然后返回棧結構。

  實現出棧操作,首先判斷是不是空,若空直接返回,不空則需將棧頂的元素賦給一個變量然后將當前元素 pos 減一;返回棧結構。

 實現棧的賦給即需要將 s1 棧內的元素依次賦給 s2 棧的,當前元素也需一致并且返回新的棧結構。

 3. 軟件開發

 在 Codeblocks 編譯環境下,使用 C++語言編寫。

 4. 軟件測試

 測試結果見圖 3.1

 圖 3.1

 5. 特點與不足

 1 5.1 技術特點

 使用了符號重載,在一定程度上簡化了函數。

 2 5.2 不足和改進的建議

 在使用符號重載時需要特別注意,防止與其他操作符混淆。

 6. 過程和體會

 1 6.1 遇到的主要問題和解決方法

 對于符號重載,剛開始不會調用函數,之后通過查閱書籍,明白了重載的含義。

 2 6.2 課程設計的體會

 本次實驗以實驗二為基礎,通過使用符號重載來更簡單的實現實驗目的。

 7. 源碼和說明

 1 7.1 文件清單及其功能說明

 experiment3.cpp 源碼 experiment3.exe 可執行文件。

 2 7.2 用戶使用說明書

 experiment3.cpp 是程序的源碼,可通過修改其中 main 函數中的變量來測試各個函數。

 3 7.3 源代碼

 #include <iostream> #include <string> using namespace std; class STACK{

  int

 *const

 elems; //申請內存用于存放棧的元素

 const

 int

  max; //棧能存放的最大元素個數

  int

  pos;

  //棧實際已有元素個數,棧空時 pos=0; public: STACK(int m);

 //初始化棧:最多 m 個元素 STACK(const STACK&s);

 //用棧 s 拷貝初始化棧 virtual int

 size ( ) const;

  //返回棧的最大元素個數 max virtual operator int () const;

 //返回棧的實際元素個數 pos virtual int operator[ ] (int x) const; //取下標 x 處的棧元素 virtual STACK& operator<<(int e);

 //將 e 入棧,并返回棧 virtual STACK& operator>>(int &e); //出棧到 e,并返回棧 virtual STACK& operator=(const STACK&s); //賦 s 給棧,并返回被賦值的棧 virtual void print( ) const;

  //打印棧 virtual ~STACK( );

  //銷毀棧 }; STACK::STACK(int m):elems(new int[m]),max(m),pos(0){} STACK::STACK(const STACK&s):elems(new int[s.max]),max(s.max),pos(s.pos) {

  for(int i=0;i<pos;i++)

  elems[i]=s.elems[i]; }; int STACK::size ( ) const{return max;} STACK::operator int () const{return pos;} int STACK::operator[ ] (int x) const{return elems[x];} STACK& STACK::operator<<(int e) {

 if(pos>max)

 {

  cout<<"棧滿";

 }

 else

 {

  *(elems+pos)=e;

  pos++;

 }

  return (*this); } STACK& STACK::operator>>(int &e) {

 if(pos==0)

 {

 cout<<"棧空";

 }

 else

 {

 e=*(elems+pos-1);

 pos--;

 }

 return (*this); } STACK& STACK::operator=(const STACK&s) {

  delete elems;

  *(int**)&elems = new int[s.max];

  *(int*)&max = s.max;

  for(pos=0;pos<s.pos;pos++)

  elems[pos] = s.elems[pos];

  return *this; } void STACK::print( ) const{

  for(int i=0;i<pos;i++)

  cout<<elems[i]<<"\n"; } STACK::~STACK( ) {

 delete []elems;

 if(elems==0)

 {

 cout<<"銷毀失敗"<<endl;

 }

  else

 {

 cout<<"銷毀成功"<<endl;

 } } int main() {

  STACK i(5),j(8);

  i<<1<<3<<6<<9;

  int k;

  i>>k;

  cout<<k<<"\n";

  i.print();

  j=i;

  j.print();

  j<<1<<2<<3<<4;

  cout<<endl<<(int)j; }

 實驗四.

 面向對象的整型隊列編程

 1. 需求分析

 1 1.1 題目要求

 整型隊列是一種先進先出的存儲結構,對其進行的操作通常包括判斷隊列是否為空、向隊列頂添加一個整型元素、出隊列等。整型隊列類型及其操作函數采用面向對象的 C++語言定義,請將完成上述操作的所有函數采用 C++編程, 然后寫一個 main 函數對隊列的所有操作函數進行測試。

 class QUEUE{

  int

 *const

 elems; //申請內存用于存放隊列的元素

  const

 int

  max; //隊列能存放的最大元素個數

  int

  head, tail;

 //隊列頭和尾,隊列空時 head=tail;初始時 head=tail=0 public: QUEUE(int m);

 //初始化隊列:最多 m 個元素 QUEUE(const QUEUE&s);

 //用隊列 s 拷貝初始化隊列 virtual operator int ( ) const; //返回隊列的實際元素個數 virtual QUEUE& operator<<(int e)volatile;

 //將 e 入隊列,并返回隊列 virtual QUEUE& operator>>(int &e)volatile; //出隊列到 e,并返回隊列 virtual QUEUE& operator=(const QUEUE&s); //賦 s 給隊列,并返回被賦值的隊列 virtual void print( ) const;

  //打印隊列 virtual ~QUEUE( );

  //銷毀隊列 }; 2 1.2 需求分析

 本題目用數組實現隊列,需要預知需要空間的大小,會造成空間浪費或不夠用;插入或刪除不需要動態分配或刪除內存,耗時很小;支持隨機存取。

 2. 系統設計

 定義一個類,分配一個數組空間來存儲棧內元素信息,類中分別定義兩個int 元素表示隊列的頭和尾,入棧的時候,頭加一;出棧的時候,尾加一。

 3. 軟件開發

 在 Codeblocks 編譯環境下,使用 C++語言編寫。

 4. 軟件測試

 測試結果見圖 4.1

 圖 4.1 5. 特點與不足

 1 5.1 技術特點

 通過創建隊列類 QUEUE,完成了隊列的構造析構等諸多功能;同時再次運用重載操作符方便了入隊出隊等操作的完成。

 2 5.2 不足和改進的建議

 隊列一旦生成則無法改變。

 6. 過程和體會

 1 6.1 遇到的主要問題和解決方法

 如何構建一個循環隊列,解決方法利用求余的方法,當頭結點大于最大元素的時候,除以最大元素求余,重新的得到頭結點。

 2 6.2 課程設計的體會

 本次實驗使用面向對象的方法來編寫一個隊列,讓我對隊列的構建以及對其進行一些列的操作有了更進一步的了解。與前幾次棧的實驗相比,難度有所增加,但更鍛煉了個人能力。

 7. 源碼和說明

 1 7.1 文件清單及其功能說明

 experiment4.cpp 源碼 experiment4.exe 可執行文件。

 2 7.2 用戶使用說明書

 experiment4.cpp 是程序的源碼,可通過修改其中 main 函數中的變量來測試各個函數。

 3 7.3 源代碼

 #include <iostream> #include <string> using namespace std; class QUEUE{

  int

 *const

 elems; //申請內存用于存放隊列的元素

  const

 int

  max; //隊列能存放的最大元素個數

  int

  head, tail; //隊列頭和尾,隊列空時 head=tail;初始時head=tail=0 public: QUEUE(int m);

 //初始化隊列:最多 m 個元素 QUEUE(const QUEUE&s);

 //用隊列 s 拷貝初始化隊列 virtual operator int ( ) const;

  //返回隊列的實際元素個數 virtual QUEUE& operator<<(int e);

 //將 e 入隊列,并返回隊列 virtual QUEUE& operator>>(int &e); //出隊列到 e,并返回隊列 virtual QUEUE& operator=(const QUEUE&s); //賦 s 給隊列,并返回被賦值的隊列 virtual void print( ) const;

  //打印隊列 virtual ~QUEUE( );

  //銷毀隊列

 };

 QUEUE::QUEUE(int m):elems(new int[m]),max(m),head(0),ta...

推薦訪問: 程序設計 面向對象 課程

【面向對象程序設計課程實驗報告】相關推薦

工作總結最新推薦

NEW