您的位置:首页 > 整改报告整改报告

实验二,继承机制实验报告

2025-09-08人已围观

实验二,继承机制实验报告
  浙江理工大学信息学院 实验指导书 实验名称:

  类的继承机制的实现 学时安排:3 实验类别: 设计性实验 实验要求:1 人 1组 学号: 姓名  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的 1.掌握单继承和多重继承的概念. 2.理解不同的继承类型:public、protected和 private,掌握何时使用何种继承类型。

  3。掌握类层次中构造函数的定义方式和建立对象时构造和析构次序 二、实验原理介绍 通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数. 三、实验设备介绍 软件需求:

  windows 或 linux 下的 c++编译器 硬件需求:

  对于硬件方面的要求,建议配置是 Pentium III 450 以上的 CPU 处理器,64MB 以上的内存,200MB 的自由硬盘空间、CD-ROM 驱动器、能支持 24 位真彩色的显示卡、彩色显示器、打印机。

  四、实验内容 实现对第一次实验结果 Elevator类的功能扩展。在 Elevator 类已有功能的基础上派生 AdvancedElevator 类。AdvancedElevator 类可以实现当多人在不同楼层等待乘坐上行或下行的同一部电梯时,能够合理的根据乘坐人的需求对电梯经停的楼层进行排序.

  要求:

  1.为了实现上的方便性,我们假设同一组要求乘坐电梯的乘客或者都是上行,或者都是下行。

  2.在主函数中对该类的功能进行测试,测试方法是首先选择在某一时间段一组要乘坐电梯的乘客是上行还是下行,然后输入组中乘客的人数及每一个乘客所在楼层和目的楼层,由 AdvancedElevator 类实例化后的电梯对象在运作的过程中,如果电梯是上行,则能根据乘客所在的楼层和目的楼层从下向上依次停靠;如果电梯是下行,则能根据乘客所在的楼层和目的楼层从上向下依次停靠。

  3。在测试的过程中,还需要注意测试当多个用户在同一楼层或多个用户的目的楼层为同一楼层时情况的处理。

  提示:

  为了方便描述乘客,我们可以定义一个Person 类,主要描述每一个乘客所在楼层和目的楼层。AdvancedElevator 类从Elevator 类继承而来,它从某一个时间段要乘坐电梯的每个乘客的信息当中提取其所在楼层和目的楼层信息,然后对它们进行排序,再由继承自基类 Elevator的成员 setFloorNumber对要停靠的楼层序列依次输出. 思考(可选) ) 如果加入乘客的体重信息,如何实现在停靠楼层对超载信息的提示。

  五 程序清单

  (el。cpp) #include "Elevator。h” Elevator::Elevator(int f) { floor =f; up=false; down=false;

  currentFloor=1;

  };

  void Elevator::setUpButton() { if(currentFloor>floorNumber) {

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout〈<”您不能上行!"<〈endl〈<endl;

  } else if(floorNumber>floor) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<<"没这一层!太高啦!您想上天?!"〈<endl〈〈endl;

  } else up=true;

  } void Elevator::setDownButton() { if(currentFloor<floorNumber) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<〈”您不能下行!"<〈endl〈〈endl;

  } else if(floorNumber<1) {

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); cout<<"没这一层!太低啦!您想入地?!”<〈endl<<endl;

  } else down=true;

  } void Elevator::setFloorNumber(int floorNumber) { if(up) { for(;currentFloor<floorNumber;currentFloor++) { cout<<”—-"〈〈currentFloor<<”-—"<<endl; Sleep(2000);

  } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

  cout〈<"第"〈〈currentFloor<〈”层到了"<<endl〈<endl;

  up=false;

  } if(down) { for(;

  currentFloor〉floorNumber;currentFloor-—) { cout<<"--"〈〈currentFloor〈<”--”<<endl; Sleep(2000);} SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

  cout<〈”第"<<currentFloor〈<”层到了”〈〈endl<<endl; down=false;

  } } void Elevator::choice() { cin>>n;

  switch(n) { case 1: cout<<"当前电梯停在”<<currentFloor〈〈"层”<<endl;

  cout〈<”请输入要进入的楼层"<<endl;

  cin>〉floorNumber;setUpButton ();setFloorNumber(floorNumber); break;

  case 2:

  cout〈<"当前电梯停在”〈<currentFloor<<”层”〈〈endl;

  if(currentFloor==1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<<”您已经在第一层了!除非您自己打洞,不然我是不会带你下去的!”<<endl<<endl;

  return; } cout<〈"请输入要进入的楼层"<〈endl;

  cin〉>flo

  orNumber;

  setDownButton();setFloorNumber(floorNumber);

  break; case 3:exit(0); de f a u lt :

  Se t C o nso l e TextA t t r ibu t e(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<<”只能选上升和下降!您难道还想玩电梯漂移?!"〈〈endl〈<endl; break;

  } SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout〈<"当前电梯停在"<〈currentFloor〈〈"层"<〈endl; } void Elevator::charge() { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<<"———请选择操作---"<<endl;

  cout<〈”| 1。上升 |"<〈endl; cout〈〈"| 2.下降 |”〈<endl; cout<<"| 3.退出 |"〈<endl;

  cout<〈"|——-----—--—-—-|”〈<endl;

  } (main.cpp) #include "Elevator.h"

  class AdvElevator:public Elevator { public: AdvElevator(int f):Elevator(f){currentFloor=1;

  } void setdata();

  void setFloorNumber(); void choice(); private:

  int judge(int); int fln[20];

  int w[10];

  int N; int num;

  }; void AdvElevator::setFloorNumber() { int i; if(up) {cout<<endl; for(i=0;

  currentFloor<=floorNumber;

  currentFloor++) { if(currentFloor==fln[i]) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

  cout<<"第"<<currentFloor<<”层到了"<<endl;

  Sleep(2000);

  i++;

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } else {cout<〈"--"<〈currentFloor〈<"—-”〈〈endl;

  Sleep(2000);

  } } currentFloor=floorNumber;cout〈〈endl;up=false;

  } if(down) {cout〈<endl;

  for(i=N-1;

  currentFloor>=floorNumber;currentFloor--) { if(currentFloor==fln[i]) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"第"〈<currentFloor<<”层到了”<〈endl;

  Sleep(2000);i—-; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } else{ cout〈<"—-"<〈currentFloor<<”-—"<<endl;

  Sleep(2000);

  }

  }currentFloor=floorNumber;

  cout〈<endl;

  down=false; } } void AdvElevator::setdata() { cout<<"请告诉我共有几人"<<endl;

  int weight=0;

  cin>>num;

  cout〈〈endl;

  N=2*num;

  int i=0,n=1,q=1;

  while(q<=num) { cout<〈”第"<〈q〈<"位乘客,请依次输入你所在楼层、您想去的楼层及您的体重(kg)”〈〈endl;

  cin〉〉fln[i]>>fln[n]>>w[i]; if(judge(fln[n])==1){q++;

  N—=2;fln[i]=’\0’;continue;

  } weight+=w[i];

  if(weight>500) {cout<<endl;

  cout<<”第"<<q〈<"位乘客,因超载原因,您不能上"〈<endl<〈endl; q++;N-=2;

  fln[i]=’\0";weight-=w[i];w[i]=0;continue;

  } i+=2;

  n+=2;

  q++;

  } for (i=0;

  i<N-1;

  i++ ) for (q=i+1;

  q<N;

  q++ ) ) ]q[nlf==]i[nlf( fi? {

  ) ++n ;N<n ;q=n(rof? ;]1+n[nlf=]n[nlf? ;

  -—N? q--;

  } ? int j,k,temp;

  for(j=0;

  j〈N;j++) for(k=0;

  k<N-1-j;

  k++) { if(fln[k]〉fln[k+1]) { temp=fln[k];

  fln[k]=fln[k+1];

  fln[k+1]=temp; } } if(fln[0]=='\0’) num=100;

  if(up)floorNumber=fln[N—1];

  if(down)floorNumber=fln[0];

  } int AdvElevator::judge(int n) { if(up) { if(currentFloor>n) { Set C o n s oleTex t A t t r i b u t e(GetS t d H a n dle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_R

  ED|FOREGROUND_GREEN);

  cout<〈"您不能上行!别捣乱,给我出去!”〈〈endl;

  S e t Console T e x t A t t ribute(Get S tdHa n dle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

  return 1;

  } else if(n>floor) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout〈<"没这一层!太高啦!您想上天?!别捣乱,给我出去!”<<endl;

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1;

  } } if(down) { if(currentFloor〈n) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<<"您不能下行!别捣乱,给我出去!”<〈endl;

  SetConsoleTextAttribute(GetStdHandle(STD_OU

  TPUT_ H ANDLE ), FOREGROUN D _INTENSITY|F O RE G R O U N D _R ED|FOREGROUND_GREEN|FOREGROUND_BLUE);

  return 1; } else if(n〈1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); cout〈<"没这一层!太低啦!您想入地?!别捣乱,给我出去!"<〈endl;

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1; } } return 0; } void AdvElevator::choice() { cin〉〉N;

  switch(N) { case 1:

  up=true;cout<〈"当前电梯停在”<<currentFloor<<"层”<<endl; setdata();

  if(num==100)break;setFloorNumber(); break; case 2:

  down=true;cout<<”当前电梯停在"<<c

  urrentFloor<<”层"〈<endl; if(currentFloor==1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<<"您已经在第一层了!除非您自己打洞,不然我是不会带你下去的!"<<endl<〈endl;down=false;

  return; } setdata();if(num==100)break;setFloorNumber();break;

  case 3:exit(0); default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

  cout<〈”只能选上升和下降!您难道还想玩电梯漂移?!"〈〈endl<<endl;

  break;

  } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

  cout〈〈”---——-----—----"<〈endl; } int main() { long a; time(&a);

  int floor;

  cout<〈"告诉我总共有几层”<〈endl;

  cin>〉floor; AdvElevator el(floor);

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<〈ctime(&a)〈〈endl;

  cout<<”本电梯共"〈<floor<〈"层,且最多上 10 人,欢迎您的使用(限重 500kg)”<〈endl<<endl; while(1) { el。charge();

  el。AdvElevator::choice();

  } return 0;

  } 六 运行结果

  七 实验心得 复习了有关数组的内容,比如排序,去除重复元素;

  费了很大精力来改,但总觉得写得不好,代码太长,内容冗杂。有待进步,加强。

  GPIO控制实验实验报告

  计算机导论实验二实验报告(范文)

  计算机导论实验二实验报告(范文)

  实验报告二

  软件工程实验报告实验二

  相关热词搜索:

  实验

  继承

  机制

  报告

随机图文