課
程
實
驗
報
告
課程名稱:
面向對象程序設計
院 院
系 :
專業班級 :
學
號 :
姓
名 :
指導教師 :
目 目
錄 實驗一. . 面向過程的整型棧編程 ....................................................................................... 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...
推薦訪問: 程序設計 面向對象 課程上一篇:文明單位申報材料2020
下一篇:先進個人申報材料專題
在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《