Problem B: 驾驶员与汽车
来源:互联网 发布:网络兼职可靠的 编辑:程序博客网 时间:2024/04/28 20:19
Problem B: 驾驶员与汽车
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行,每个测试用例对应一行输入,具体格式参见样例。
HINT
1.使用typeid来判定一个基类指针实际指向的对象的类型。
2.注意:append.cc中已经给出了Driver类的一个方法,不要在Driver类重复定义了。
#include <iostream>#include <typeinfo>#include <string>#include <iomanip>using namespace std;class Automobile {protected: double speed;public: Automobile(double s) : speed(s) {} virtual void run() const = 0; virtual ~Automobile() { cout << "An automobile is erased!" << endl; }};class Benz : public Automobile {public: Benz(double speed) : Automobile(speed) {} ~Benz() { cout << "A Benz is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Benz at speed of "<<speed<<"km/h." << endl; }};class Buick : public Automobile {public: Buick(double speed) : Automobile(speed) {} ~Buick() { cout << "A Buick is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Buick at speed of "<<speed<<"km/h." << endl; }};class Zhongba : public Automobile {public: Zhongba(double speed) : Automobile(speed) {} ~Zhongba() { cout << "A Zhongba is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Zhongba at speed of "<<speed<<"km/h." << endl; }};class Beiqi : public Automobile {public: Beiqi(double speed) : Automobile(speed) {} ~Beiqi() { cout << "A Beiqi is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Beiqi at speed of "<<speed<<"km/h." << endl; }};class Dayu : public Automobile {public: Dayu(double speed) : Automobile(speed) {} ~Dayu() { cout << "A Dayu is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Dayu at speed of "<<speed<<"km/h." << endl; }};class Jianghuai : public Automobile {public: Jianghuai(double speed) : Automobile(speed) {} ~Jianghuai() { cout << "A Jianghuai is erased!" << endl; } void run() const { cout << setprecision(2) << setiosflags(ios::fixed); cout << "Jianghuai at speed of "<<speed<<"km/h." << endl; }};class Driver {private: string name; char type;public: Driver(string s, char c) : name(s), type(c) {} 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;}
阅读全文
1 0
- Problem B: 驾驶员与汽车
- Problem E: 驾驶员与汽车
- Problem A: 驾驶员与汽车
- Problem A: 驾驶员与汽车
- Problem D: 驾驶员与汽车
- Problem B: qwb与矩阵
- Problem B: 图形计数与求面积
- Problem B: 图形计数与求面积
- Problem B: 图形计数与求面积
- Problem B: 图形计数与求面积
- Problem B
- Problem B
- Problem B
- Problem B
- Problem B
- Problem B
- Problem B
- Problem B
- Linux中/proc目录下文件详解
- ReplicaStateMachine分析
- HDU 2.1.8
- Java 数据库系列教程--连接MySQL的常用方式
- 前端性能自动化执行机服务开发
- Problem B: 驾驶员与汽车
- i/o速度比较
- cnd窗口命令编译工程出错解析
- 【模板】最小费用最大流(增广路)(模板题:洛谷P3381)
- 去除input,textarea,select 默认选中聚焦事件
- 华为机试:表达式转换
- CentOS6.5(Python-2.7.12)安装Pip
- Java 实例
- javascript中的for in循环和for循环的使用