知错不会改,大家教教我呀

来源:百度知道 编辑:UC知道 时间:2024/06/23 20:53:05
这样一道作业题:
5) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle),汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle),它们都有Run、Stop等成员函数。在main ( )函数中定义vehicle,bicycle,motorcar,motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。

我写的:
#include<iostream>
using namespace std;
class vehicle
{
public:
virtual void run(){cout<<"vehicle is running\n";}
virtual void stop(){cout<<"vehicle is stop\n";}
};
class bicycle:public vehicle
{
void run(){cout<<"bicycle is running\n";}
void stop(){cout<<"bicycle is stop\n";}
};
class motorcar:public vehicle
{
void run(){cout<<"motorcar is running\n";}
void stop(){cout<<"motorcar is stop\n";}
};
class motorcycle:public bicycle,public motorcar
{
void run(){co

你设为虚基类就可以了。
class bicycle:virtual public vehicle
{
void run(){cout<<"bicycle is running\n";}
void stop(){cout<<"bicycle is stop\n";}
};
class motorcar:virtual public vehicle
{
void run(){cout<<"motorcar is running\n";}
void stop(){cout<<"motorcar is stop\n";}
};
其他代码不变,就可以了。

class vehicle
{
public:
/*virtual void run(),virtual void stop()
这两个函数应该是纯虚函数,你可能忽略了
纯虚函数在基类中是不能有函数体的,而且后面只能为=0(这并不是赋值为0,而是告诉编译器这是纯虚函数而已);其次这应该是一条声明语句,后面需要加个分号';'
*/
/*下面应该该为
virtual void run();或者virtual void run()=0;
*/

virtual void run(){cout<<"vehicle is running\n";}

/*下面应该该为
virtual void stop();或者virtual void stop()=0;
*/
virtual void stop(){cout<<"vehicle is stop\n";}
};