【id:180】【20分】B. 汽车收费(虚函数和多态)

该文描述了一个C++程序设计问题,涉及面向对象编程。系统需管理不同类型的车辆(Car,Truck,Bus),每种车有不同的收费计算方法。Car的费用基于载客数和重量,Truck仅按重量,Bus则按载客数。程序通过基类Vehicle实现多态,并使用虚函数display()展示费用。主函数创建对象并根据输入信息计算费用。
摘要由CSDN通过智能技术生成

题目描述

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

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

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

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

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

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

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

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

输入

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

输出

车的编号、应缴费用

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
using namespace std;
class Vehicle
{
protected:
    string no; //编号
public:
    Vehicle() {};
    Vehicle(string n)
    {
        no = n;
    }
    virtual void display() = 0; //应收费用
};
class car :public Vehicle
{
private:
    int num;
    int weight;
public:
    car() {};
    car(string no, int n, int w) :Vehicle(no)
    {
        num = n;
        weight = w;
    }
    virtual void display()
    {
        cout << no << " " << num * 8 + weight * 2 << endl;
    }
};
class truck :public Vehicle
{
private:
    int weight;
public:
    truck() {};
    truck(string n, int w) :Vehicle(n)
    {
        weight = w;
    }
    virtual void display()
    {
        cout << no << " " << weight * 5 << endl;
    }
};
class bus :public Vehicle
{
private:
    int num;
public:
    bus() {};
    bus(string no, int n) :Vehicle(no)
    {
        num = n;
    }
    virtual void display()
    {
        cout << no << " " << num * 30 << endl;
    }
};
int main()
{
    int t;
    cin >> t;
    int type;
    string no;
    int num, weight;
    while (t--)
    {
        cin >> type;
        cin >> no;
        if (type == 1)
        {
            cin >> num >> weight;
            car c(no, num, weight);
            c.display();
        }
        else if (type == 2)
        {
            cin >> weight;
            truck t(no, weight);
            t.display();
        }
        else
        {
            cin >> num;
            bus b(no, num);
            b.display();
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值