实验二继承机制实验报告.docx
《实验二继承机制实验报告.docx》由会员分享,可在线阅读,更多相关《实验二继承机制实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
实验二继承机制实验报告
浙江理工大学信息学院
实验指导书
实验名称:
类的继承机制的实现学时安排:
3
实验类别:
设计性实验实验要求:
1人1组
学号:
姓名
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、实验目的
1.掌握单继承和多重继承的概念。
2.理解不同的继承类型:
public、protected和private,掌握何时使用何种继承类型。
3.掌握类层次中构造函数的定义方式和建立对象时构造和析构次序
二、实验原理介绍
通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数。
三、实验设备介绍
软件需求:
windows或linux下的c++编译器
硬件需求:
对于硬件方面的要求,建议配置是PentiumIII450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容
实现对第一次实验结果Elevator类的功能扩展。
在Elevator类已有功能的基础上派生AdvancedElevator类。
AdvancedElevator类可以实现当多人在不同楼层等待乘坐上行或下行的同一部电梯时,能够合理的根据乘坐人的需求对电梯经停的楼层进行排序。
要求:
1.为了实现上的方便性,我们假设同一组要求乘坐电梯的乘客或者都是上行,或者都是下行。
2.在主函数中对该类的功能进行测试,测试方法是首先选择在某一时间段一组要乘坐电梯的乘客是上行还是下行,然后输入组中乘客的人数及每一个乘客所在楼层和目的楼层,由AdvancedElevator类实例化后的电梯对象在运作的过程中,如果电梯是上行,则能根据乘客所在的楼层和目的楼层从下向上依次停靠;如果电梯是下行,则能根据乘客所在的楼层和目的楼层从上向下依次停靠。
3.在测试的过程中,还需要注意测试当多个用户在同一楼层或多个用户的目的楼层为同一楼层时情况的处理。
提示:
为了方便描述乘客,我们可以定义一个Person类,主要描述每一个乘客所在楼层和目的楼层。
AdvancedElevator类从Elevator类继承而来,它从某一个时间段要乘坐电梯的每个乘客的信息当中提取其所在楼层和目的楼层信息,然后对它们进行排序,再由继承自基类Elevator的成员setFloorNumber对要停靠的楼层序列依次输出。
思考(可选)
如果加入乘客的体重信息,如何实现在停靠楼层对超载信息的提示。
五程序清单
()
#include""
Elevator:
:
Elevator(intf)
{
floor=f;
up=false;
down=false;
currentFloor=1;
};
voidElevator:
:
setUpButton()
{
if(currentFloor>floorNumber)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能上行!
"<}
elseif(floorNumber>floor)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"没这一层!
太高啦!
您想上天!
"<}
elseup=true;
}
voidElevator:
:
setDownButton()
{
if(currentFloor{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能下行!
"<}
elseif(floorNumber<1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"没这一层!
太低啦!
您想入地!
"<}
elsedown=true;
}
voidElevator:
:
setFloorNumber(intfloorNumber)
{
if(up)
{
for(;currentFloor{cout<<"--"<Sleep(2000);}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<"第"<up=false;
}
if(down)
{
for(;currentFloor>floorNumber;currentFloor--)
{cout<<"--"<Sleep(2000);}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<"第"<down=false;
}
}
voidElevator:
:
choice()
{
cin>>n;
switch(n)
{
case1:
cout<<"当前电梯停在"<cout<<"请输入要进入的楼层"<>floorNumber;setUpButton();setFloorNumber(floorNumber);break;
case2:
cout<<"当前电梯停在"<if(currentFloor==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您已经在第一层了!
除非您自己打洞,不然我是不会带你下去的!
"<}
cout<<"请输入要进入的楼层"<>floorNumber;setDownButton();setFloorNumber(floorNumber);break;
case3:
exit(0);
default:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"只能选上升和下降!
您难道还想玩电梯漂移!
"<}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<"当前电梯停在"<}
voidElevator:
:
charge()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<"---请选择操作---"<cout<<"|1.上升|"<cout<<"|2.下降|"<cout<<"|3.退出|"<cout<<"|--------------|"<}
()
#include""
classAdvElevator:
publicElevator
{
public:
AdvElevator(intf):
Elevator(f){currentFloor=1;}
voidsetdata();
voidsetFloorNumber();
voidchoice();
private:
intjudge(int);
intfln[20];
intw[10];
intN;
intnum;
};
voidAdvElevator:
:
setFloorNumber()
{
inti;
if(up)
{cout<for(i=0;currentFloor<=floorNumber;currentFloor++)
{
if(currentFloor==fln[i])
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<"第"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
else{cout<<"--"<}currentFloor=floorNumber;cout<}
if(down)
{cout<for(i=N-1;currentFloor>=floorNumber;currentFloor--)
{
if(currentFloor==fln[i])
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<"第"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
else{cout<<"--"<}currentFloor=floorNumber;cout<}
}
voidAdvElevator:
:
setdata()
{
cout<<"请告诉我共有几人"<intweight=0;
cin>>num;cout<N=2*num;
inti=0,n=1,q=1;
while(q<=num)
{
cout<<"第"<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<i+=2;n+=2;q++;
}
for(i=0;ifor(q=i+1;qif(fln[i]==fln[q])
{
for(n=q;nfln[n]=fln[n+1];
N--;
q--;
}
intj,k,temp;
for(j=0;jfor(k=0;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];
}
intAdvElevator:
:
judge(intn)
{
if(up)
{
if(currentFloor>n)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能上行!
别捣乱,给我出去!
"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return1;
}
elseif(n>floor)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"没这一层!
太高啦!
您想上天!
别捣乱,给我出去!
"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return1;
}
}
if(down)
{
if(currentFloor{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能下行!
别捣乱,给我出去!
"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return1;
}
elseif(n<1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"没这一层!
太低啦!
您想入地!
别捣乱,给我出去!
"<SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return1;
}
}
return0;
}
voidAdvElevator:
:
choice()
{
cin>>N;
switch(N)
{
case1:
up=true;cout<<"当前电梯停在"<setdata();if(num==100)break;setFloorNumber();break;
case2:
down=true;cout<<"当前电梯停在"<if(currentFloor==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您已经在第一层了!
除非您自己打洞,不然我是不会带你下去的!
"<}
setdata();if(num==100)break;setFloorNumber();break;
case3:
exit(0);
default:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"只能选上升和下降!
您难道还想玩电梯漂移!
"<}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<"---------------"<}
intmain()
{
longa;
time(&a);
intfloor;
cout<<"告诉我总共有几层"<cin>>floor;
AdvElevatorel(floor);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<cout<<"本电梯共"<while
(1)
{
();
:
:
choice();
}
return0;
}
六运行结果
七实验心得
复习了有关数组的内容,比如排序,去除重复元素;费了很大精力来改,但总觉得写得不好,代码太长,内容冗杂。
有待进步,加强。