Problem A: 驾驶员与汽车

来源:互联网 发布:c语言经典代码 编辑:程序博客网 时间:2024/04/28 04:53

Problem A: 驾驶员与汽车

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 2490  Solved: 1046
[Submit][Status][Web Board]

Description

我们知道,目前我国的驾照大致可分为A、B、C三种,其中C证只能开小型客车(货车),B证可开中、小型客车(货车),A证没有限制。现在请定义如下几个类:

1. Automobile:抽象类,具有数据成员double speed,纯虚函数virtual void run() const = 0。

2. 六种车型,即小型车Benz、Buick;中型车Zhongba、Beiqi;以及大型车Dayu、Jianghuai。它们都是Automobile的子类。

3. Driver类,具有string name和char type两个数据成员,前者是司机的名字,后者是司机持有的驾照类型(A、B或C)。提供Drive(Automobile *)方法,根据驾照类型判定该司机是否可以驾驶指定的汽车。

Input

输入分多行。第一行是一个整数M>0,表示之后有M个测试用例。

每个测试用例包括四部分:司机姓名(不含空白符)、驾照类型(A、B或C)、车型(分别用字母a~f表示六种车型,对应的车型可以从main()中看出)以及该车的行驶速度(double类型范围内的正数)。

Output

输出共M行,每个测试用例对应一行输入,具体格式参见样例。

Sample Input

4zhangsan C a 100.33lisi C d 100.33wangwu B f 100.33Tom A e 300.00

Sample Output

Driver zhangsan can drive Benz at speed of 100.33km/h.A Benz is erased!An automobile is erased!Driver lisi cannot drive bus.A Beiqi is erased!An automobile is erased!Driver wangwu cannot drive large bus.A Jianghuai is erased!An automobile is erased!Driver Tom can drive Dayu at speed of 300.00km/h.A Dayu is erased!An automobile is erased!

HINT

1.使用typeid来判定一个基类指针实际指向的对象的类型。


2.注意:append.cc中已经给出了Driver类的一个方法,不要在Driver类重复定义了。


Append Code

append.cc,


#include<iostream>#include<algorithm>#include<typeinfo>#include<iomanip>using namespace std;class Automobile{public:    double speed;public:    Automobile(double spe=0):speed(spe){}    virtual void run()const =0;    virtual ~Automobile(){cout<<"An automobile is erased!"<<endl;}};class Benz:public Automobile{public:    double speed;    Benz(double spe):speed(spe){}    virtual ~Benz(){cout<<"A Benz is erased!"<<endl;}    void run()const    {cout<<"Benz at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Buick:public Automobile{public:     double speed;    Buick(double spe):speed(spe){}    virtual ~Buick(){cout<<"A Buick is erased!"<<endl;}    void run()const {cout<<"Buick at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Zhongba:public Automobile{public:     double speed;    Zhongba(double spe):speed(spe){}    virtual ~Zhongba(){cout<<"A Zhongba is erased!"<<endl;}    void run()const    {cout<<"Zhongba at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Beiqi:public Automobile{public:     double speed;    Beiqi(double spe):speed(spe){}    virtual ~Beiqi(){cout<<"A Beiqi is erased!"<<endl;}    void run()const{ cout<<"Beiqi at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Dayu:public Automobile{public:     double speed;    Dayu(double spe):speed(spe){}    virtual ~Dayu(){cout<<"A Dayu is erased!"<<endl;}    void run()const { cout<<"Dayu at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Jianghuai:public Automobile{public:     double speed;    Jianghuai(double spe):speed(spe){}    virtual ~Jianghuai(){cout<<"A Jianghuai is erased!"<<endl;}    void run()const {cout<<"Jianghuai at speed of "<< fixed << setprecision(2)<<speed<<"km/h."<<endl;}};class Driver{public:    string name;    char type;public:    Driver(string na, char ty):name(na),type(ty){}    ~Driver(){}    void Drive(Automobile *);};void Driver::Drive(Automobile *automobile){    switch (type)    {    case 'A':        cout<<"Driver "<<name<<" can drive ";        automobile->run();        break;    case 'B':        if (typeid(*automobile) == typeid(Dayu) || typeid(*automobile) == typeid(Jianghuai))            cout<<"Driver "<<name<<" cannot drive large bus."<<endl;        else        {            cout<<"Driver "<<name<<" can drive ";            automobile->run();        }        break;    case 'C':        if (typeid(*automobile) != typeid(Benz) && typeid(*automobile) != typeid(Buick))            cout<<"Driver "<<name<<" cannot drive bus."<<endl;        else        {            cout<<"Driver "<<name<<" can drive ";            automobile->run();        }        break;    }}int main(){    string name;    char type;    double speed;    char automobileType;    int cases;    Automobile *automobile;    cin>>cases;    for (int i = 0; i < cases; i++)    {        cin>>name>>type>>automobileType>>speed;        Driver driver(name, type);        switch (automobileType)        {        case 'a':            automobile = new Benz(speed);            break;        case 'b':            automobile = new Buick(speed);            break;        case 'c':            automobile = new Zhongba(speed);            break;        case 'd':            automobile = new Beiqi(speed);            break;        case 'e':            automobile = new Dayu(speed);            break;        case 'f':            automobile = new Jianghuai(speed);            break;        }        driver.Drive(automobile);        delete automobile;    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为荣耀7x密码忘了怎么办 华为荣耀7x应用锁密码忘了怎么办 同学群里有人发低俗信息怎么办 小孩读英语绘本大人不会翻译怎么办 东西掉到手刹缝里面了怎么办 泰拉瑞亚猩红之地蔓延到家里怎么办 三星r.467玩dnf闪退怎么办 美团外卖不小心撞到汽车怎么办 如果你在战场上遇到华裔美军怎么办 衣服洗完了干了后发黄怎么办 毛衣起球怎么办学会这几个小妙招 小车没电了打不着火怎么办 老婆花钱大手大脚又要我给钱怎么办 住酒店手机id被劫持了怎么办 孩子老是送玩具给别的小朋友怎么办 老板总想和我谈人生怎么办gl 导师让用师姐的数据写论文怎么办 签了平面模特协议想违约怎么办 福州96年以前社保手册丢了怎么办 被老师缴的手机弄没了怎么办 户口在成都医保在德阳生孩子怎么办 微课掌上通看不到孩子班级圈怎么办 微课掌上通的录音错误是怎么办 微课视频录制ppt里面音乐怎么办 老师在街上和别人吵起来了怎么办 手机录屏传到爱剪辑变成竖屏怎么办 尔雅通识课程考试忘记做了怎么办 尔雅通识课过了课程完成时间怎么办 微信账号没冻结登录不了怎么办 微信解封电话号码没有电话号怎么办 ps中智能对象不能直接编辑怎么办 工资低奖金高银行流水不够怎么办 我水费交了自来水公司不给开怎么办 艺考文化分数差4分二本怎么办 学信网手机号换了密码忘记了怎么办 自考毕业证学信网上查不到怎么办 苹果手机自带浏览器证书过期怎么办 手机连接工行证书介质失贩怎么办 老公要带与小三生的孩子回家怎么办 小三怀孕打胎后还是很爱老公怎么办 小三怀孕开不到引产证明怎么办