欢迎访问有用文档网!

当前位置: 有用文档网 > 心得体会 >

面向对象程序设计课程实验报告

| 浏览次数:

 课

  程

  实

  验

  报

  告

  课程名称:

 面向对象程序设计

 院 院

 系 :

 专业班级 :

 学

 号 :

 姓

 名 :

  指导教师 :

 目 目

 录 实验一. . 面向过程的整型栈编程 ....................................................................................... 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...

推荐访问:程序设计 面向对象 课程

热门排行Top Ranking

新时代青年的奋斗精神心得体会5篇

新时代青年的奋斗精神心得体会5篇新时代青年的奋斗精神心得体会篇1为进一步弘扬爱国奋斗奉献精神,激励党

XX乡镇防止返贫致贫监测和帮扶工作方案

XX乡镇防止返贫致贫监测和帮扶工作方案 为认真落实党的十九届四中全会关于“坚决打赢脱贫攻

坚持总体国家安全观心得体会250字8篇

坚持总体国家安全观心得体会250字8篇坚持总体国家安全观心得体会250字篇1“安而不忘危,存而不忘亡

宣传部部长心得体会15篇

宣传部部长心得体会15篇宣传部部长心得体会篇1首先,感谢领导给我这次评选优秀员工的机会,也感谢您能在

管理信息系统案例

第一章 信息系统与管理 案例((或实例) 得讨论题及点评((或回答)) [实例]利润计划工作中得反复

大学生体育课心得体会1500字5篇

大学生体育课心得体会1500字5篇大学生体育课心得体会1500字篇1不知不觉,进入大学第一个学期的体

餐饮单位疫情防控工作汇报

餐饮单位疫情防控工作汇报根据省、市、区疫情防控指挥部统一部署,严格落实《省市场监督管理局关于进一步加

党支部党建工作年度台账-基层党建工作台账

党支部党建工作年度台账::基层党建工作台账 党支部党建工作年度台账说明为抓好党建工作,根据《党章》《

党员的时代楷模心得体会12篇

党员的时代楷模心得体会12篇党员的时代楷模心得体会篇1@党员干部“打工攻略”请查收一年一度的“双十一

公文格式国家标准

公文格式国家标准 1范围 本标准规定了党政机关公文通用的纸张要求、排版和印制装订要求、公文格式各要素

内勤辅警先进事迹材料

内勤辅警先进事迹材料3篇 内勤辅警先进事迹材料1 办公室工作室一项既辛苦、又清苦的脑力劳动,他没有惊

傅雷家书阅读心得及感悟10篇

傅雷家书阅读心得及感悟10篇傅雷家书阅读心得及感悟篇1一连几天,我都沉浸在《傅雷家书》这本书中,感受