最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验二 继承机制实验报告

来源:动视网 责编:小OO 时间:2025-10-06 05:55:27
文档

实验二 继承机制实验报告

浙江理工大学信息学院实验指导书实验名称:类的继承机制的实现学时安排:3实验类别:设计性实验实验要求:1人1组学号:姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.掌握单继承和多重继承的概念。2.理解不同的继承类型:public、protected和private,掌握何时使用何种继承类型。3.掌握类层次中构造函数的定义方式和建立对象时构造和析构次序二、实验原理介绍通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数。三、实验设备介绍软件需求
推荐度:
导读浙江理工大学信息学院实验指导书实验名称:类的继承机制的实现学时安排:3实验类别:设计性实验实验要求:1人1组学号:姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.掌握单继承和多重继承的概念。2.理解不同的继承类型:public、protected和private,掌握何时使用何种继承类型。3.掌握类层次中构造函数的定义方式和建立对象时构造和析构次序二、实验原理介绍通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数。三、实验设备介绍软件需求
浙江理工大学信息学院

实验指导书

实验名称:类的继承机制的实现                      学时安排:3

实验类别:设计性实验                         实验要求:1人1组  

学号:                        姓名                

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的

1.掌握单继承和多重继承的概念。

2.理解不同的继承类型:public、protected和private,掌握何时使用何种继承类型。

3.掌握类层次中构造函数的定义方式和建立对象时构造和析构次序

二、实验原理介绍

通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数。

三、实验设备介绍

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

硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,MB以上的内存,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<<"您不能上行!"<    }

else if(floorNumber>floor)

    {

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

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

    else up=true;

}

void Elevator::setDownButton()

{

if(currentFloor    {

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

cout<<"您不能下行!"<    }

else if(floorNumber<1)

    {

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

cout<<"没这一层!太低啦!您想入地?!"<    }

    else down=true;

}

void Elevator::setFloorNumber(int floorNumber)

{

    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;

    }

}

void Elevator::choice()

{

cin>>n;

        switch(n)

        {

case 1: cout<<"当前电梯停在"< cout<<"请输入要进入的楼层"<>floorNumber;setUpButton();setFloorNumber(floorNumber); break;

case 2: cout<<"当前电梯停在"<                if(currentFloor==1)

            {

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

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

cout<<"请输入要进入的楼层"<>floorNumber;setDownButton();setFloorNumber(floorNumber);break;

            case 3: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<<"当前电梯停在"<}

void Elevator::charge()

{

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

cout<<"---请选择操作---"< cout<<"| 1.上升 |"< cout<<"| 2.下降 |"< cout<<"| 3.退出 |"< cout<<"|--------------|"<}

(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< 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<    }

}

void AdvElevator::setdata()

{

cout<<"请告诉我共有几人"<    int weight=0;

cin>>num;cout<    N=2*num;

    int i=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; i for (q=i+1; q        if (fln[i]== fln[q] )

       {

     for(n=q; n            fln[n] = fln[n+1];

            N--;

            q--;

        }

    int j,k,temp;

for(j=0;j for(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];

}

int AdvElevator::judge(int n)

{

    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);return 1;

      }

else if(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);return 1;

      }

    }

    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);return 1;

    }

else if(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);return 1;

    }

    }

    return 0;

}

void AdvElevator::choice()

{

cin>>N;

        switch(N)

        {

case 1: up=true;cout<<"当前电梯停在"<                    setdata();if(num==100)break;setFloorNumber(); break;

case 2: 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;

            case 3: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<<"---------------"<}

int main()

{

    long a;

    time(&a);

    int floor;

cout<<"告诉我总共有几层"< cin>>floor;

    AdvElevator el(floor);

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

cout< cout<<"本电梯共"<    while(1)

    {

        el.charge();

        el.AdvElevator::choice();

    }

    return 0;

}

六 运行结果

七 实验心得

复习了有关数组的内容,比如排序,去除重复元素;费了很大精力来改,但总觉得写得不好,代码太长,内容冗杂。有待进步,加强。

文档

实验二 继承机制实验报告

浙江理工大学信息学院实验指导书实验名称:类的继承机制的实现学时安排:3实验类别:设计性实验实验要求:1人1组学号:姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.掌握单继承和多重继承的概念。2.理解不同的继承类型:public、protected和private,掌握何时使用何种继承类型。3.掌握类层次中构造函数的定义方式和建立对象时构造和析构次序二、实验原理介绍通过继承机制实现对类功能的扩展,合理设计派生类的构造函数、成员函数。三、实验设备介绍软件需求
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top