应用题   请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,其中定义了vehicle类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motocycle类。要求将vehicle作为虚基类,避免二义性问题。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
    A vehicle is running!
    A vehicle has stopped!
    A bicycle is running!
    A bicycle has stopped!
    A motorcar is running!
    A motocycle is running!
    注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
    #include <iostream.h>
    class vehicle
    {
    private:
    int MaxSpeed;
    int Weight;
    public:
    vehicle(): MaxSpeed(0), Weight(0){}
    vehicle(int max_speed, int weight): MaxSpeed (max_speed ), Weight
    (weight){}
    //********** found**********
    ______Run()
    {
    cout << 'Avehicle is running!' << endl;
    }
    //********** found**********
    ______Stop()
    {
    cout << 'A vehicle has stopped!' << endl;
    }
    };
    class bicycle : virtual public vehicle
    {
    private:
    int Height;
    public:
    bicycle(): Height(0){}
    bicycle(int max_speed, int weight,int height)
    :vehicle (max_speed, weight), Height(height){};
    void Run () {cout << 'A bicycle is running!' << endl; }
    void Stop() {cout << 'A bicycle has stopped!' << endl; }
    };
    class motorcar : virtual public vehicle
    {
    private:
    int SeatNum;
    public:
    motorcar(): SeatNum(0) {}
    motorcar (int max_speed, intweight, int seat_num)
    //********** found**********
    :______{}
    void Run() {cout << 'A motorcar is running!' << endl; }
    void Stop () {cout << 'A motorcar has stopped!' << endl; }
    };
    //********** found**********
    class motorcycle: ______
    {
    public:
    motorcycle(){}
    motorcycle (int max_speed, int weight, int height, int seet_num): bicycle(max_speed, weight, height), motorcar (max_speed, weight, seet_num){};
    ~motorcycle () {};
    void Run () {cout << 'A motorcycle is running!' << endl; }
    void Stop() {cout << 'A motorcycle has stopped!' << endl; }
    };
    int main()
    {
    vehicle * ptr;
    vehicle a;
    bicycle b;
    motorcar c;
    motorcycle d;
    a.Run(); a. Stop();
    b.Run(); b. Stop();
    ptr = &c; ptr->Run();
    ptr = &d; ptr->Run();
    return 0;
    }
 
【正确答案】virtual void virtual void vehicle(max_speed, weight), SeatNum(seat_num) public bicycle, public motorcar
【答案解析】[考点] 本题考查vehicle类及其派生类bicycle、和motorcar类和motorcyrcle类,其中涉及虚函数、虚基类、构造函数和成员函数。 (1)和(2)主要考查考生对虚函数的掌握,虚函数使用virtual定义。 (3)主要考查考生对构造函数的掌握,使用成员列表初始化。 (4)主要考查考生对派生类的掌握,派生类继承基类时要表明继承方式,公有继承为public,多个继承时要使用“,”隔开。