Bootstrap

汽车收费(虚函数和多态)

题目描述

现在要开发一个系统,实现对多种汽车的收费工作。 汽车基类框架如下所示:

class Vehicle

{ protected:

string no;//编号

public:

virtual void display()=0;//应收费用

}

以Vehicle为基类,构建出Car、Truck和Bus三个类。

Car的收费公式为: 载客数*8+重量*2

Truck的收费公式为:重量*5

Bus的收费公式为: 载客数*3

生成上述类并编写主函数,要求主函数中有一个基类指针Vehicle *pv;用来做测试用。

主函数根据输入的信息,相应建立Car,Truck或Bus类对象,对于Car给出载客数和重量,Truck给出重量,Bus给出载客数。假设载客数和重量均为整数。

输入

第一行表示测试次数。从第二行开始,每个测试用例占一行,每行数据意义如下:汽车类型(1为car,2为Truck,3为Bus)、编号、基本信息(Car是载客数和重量,Truck给出重量,Bus给出载客数)。

输出

车的编号、应缴费用

--------------------------------------------------

输入样例:

4
1 002 20 5
3 009 30
2 003 50
1 010 17 6
输出样例:

002 170
009 90
003 250
010 148

AC代码

#include <bits/stdc++.h>
using namespace std;

class Vehicle
{
protected:
    string no; // 编号
public:
    Vehicle(string n) : no(n) {}
    virtual void display() = 0; // 应收费用
};

class Car : public Vehicle
{
private:
    int passengers; // 载客数
    int weight;     // 重量
public:
    Car(string n, int p, int w) : Vehicle(n), passengers(p), weight(w) {}
    virtual void display()
    {
        cout << no << " " << passengers * 8 + weight * 2 << endl;
    }
};

class Truck : public Vehicle
{
private:
    int weight; // 重量
public:
    Truck(string n, int w) : Vehicle(n), weight(w) {}
    virtual void display()
    {
        cout << no << " " << weight * 5 << endl;
    }
};

class Bus : public Vehicle
{
private:
    int passengers; // 载客数
public:
    Bus(string n, int p) : Vehicle(n), passengers(p) {}
    virtual void display()
    {
        cout << no << " " << passengers * 3 << endl;
    }
};

int main()
{
    int t;
    cin >> t; // 测试次数
    while (t--)
    {
        int type;
        string no;
        cin >> type >> no;
        Vehicle *pv;
        if (type == 1)
        {
            int passengers, weight;
            cin >> passengers >> weight;
            Car car(no, passengers, weight);
            pv = &car;
            pv->display();
        }
        else if (type == 2)
        {
            int weight;
            cin >> weight;
            Truck truck(no, weight);
            pv = &truck;
            pv->display();
        }
        else if (type == 3)
        {
            int passengers;
            cin >> passengers;
            Bus bus(no, passengers);
            pv = &bus;
            pv->display();
        }
    }
    return 0;
}

;