C++ 实验12 虚基类

【任务一】:定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类。完成程序空白处代码,并补充构造函数和析构函数。在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?

class vehicle{//车类,作为基类

protected:

     int                //最大速度,重量

public:

     void Run(){ cout<<"vehicle类开始运行!"<<endl; }

     void Stop(){ cout<<"vehicle类停止运行!"<<endl; }

};

 

class bicycle:                {//自行车类:公有继承虚基类vehicle

protected:

     int                     //高度

};

class motorcar:                   {//汽车类:公有继承虚基类vehicle

protected:

     int                    //座位数

};

class motorcycle :                    {//摩托车类:公有继承自行车类和汽车类

public:

     void Setdata(int ms,int wt,int ht,int sn)

     { MaxSpeed=ms; Weight=wt; Height=ht; SeatNum=sn; };

     void Show(){

         cout<<"最大速度:"<<MaxSpeed<<"  重量:"<<Weight

              <<"  高度:"<<Height<<"  座位数:"<<SeatNum<<endl;

     }

};

void main(){

     cout<<"int类型占用字节数: "<<sizeof(int)<<endl;  

     cout<<"vehicle占用字节数: "<<                    <<endl;

     cout<<"bicycle占用字节数: "<<                    <<endl;

     cout<<"motorcar占用字节数: "<<                   <<endl;

     cout<<"motorcycle占用字节数: "<<                  <<endl;

     motorcycle mt;

     mt.Run();

     mt.Setdata(100,200,130,2);

     mt.Show();

     mt.Stop();

}

l  编译成功后,把vehicl类设置为非虚基类,再编译一次,观察程序运行情况

我的答案:

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

 

 
2

【任务二】:根据类图,使用虚基类,修改实验11中的任务3。实现以下运行结果。

类图:C++ 实验12 虚基类

 

运行结果:C++ 实验12 虚基类

 
 

我的答案:

 

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类

C++ 实验12 虚基类