Problem I: 不同交通工具的速度

Description
不同交通工具的速度是不同的。针对自行车、摩托车和汽车分别建立类,来模拟这一情况。

定义Vechicle类,是所有交通工具的父类:

  1. 属性int speed表示交通工具的一般速度。

  2. 静态数据成员int numOfVechicles,表示创建的交通工具的数量。这个值只增不减。

  3. 静态成员函数int getNumOfVechicles(),用于获取交通工具的数量。

  4. 析构函数。输出“A vechicle is deleted.”

  5. 纯虚函数void show().

定义Bike、MotoBike和Car三个类,它们都是Vechicle的子类,且具有:

  1. 构造函数。

  2. 重写show()函数,输出“A ’s speed is ? km/h.”,其中“”是bike、motobike或car,根据所在类不同而不同。“?”是speed属性的值。

  3. 析构函数。输出“A * is deleted.”,“*”的含义同上。

定义Person类,表示司机:

  1. 数据成员string name,是人的姓名。

  2. void drive(Vechicle&)方法,输出“drives”,并调用Vechicle类的show()方法。其中“ drives”, 并调用Vechicle类的show()方法。其中“”是name的值。

Input
第1行N>0,表示有N个测试用例。

每个测试用例包括一个不含空白符的字符串、一个字符和一个整数。

Output
见样例及题目描述。

Sample Input
3
Tom B 15
Jack M 50
Mary C 100

Sample Output
In beginning, we have 0 vechicles.
Tom drives. A bike’s speed is 15km/h.
A bike is deleted.
A vechicle is deleted.
Jack drives. A motobike’s speed is 50km/h.
A motobike is deleted.
A vechicle is deleted.
Mary drives. A car’s speed is 100km/h.
A car is deleted.
A vechicle is deleted.
At the end, we have 3 vechicles.

#include <iostream>using namespace std;
class Vechicle
{
protected:int speed;static int numOfVechicles;
public:Vechicle(int a=0):speed(a){numOfVechicles++;}static int getNumOfVechicles(){return numOfVechicles;}virtual ~Vechicle()//{cout<<"A vechicle is deleted."<<endl;}virtual void show()=0;//纯虚函数};
class Bike:public Vechicle
{
public:Bike(int a1):Vechicle(a1){}void show(){cout<<"A bike's speed is "<<speed<<"km/h."<<endl;}~Bike(){cout << "A bike is deleted."<<endl;}
};
class Car:public Vechicle
{
public:Car(int a1):Vechicle(a1){}void show(){cout<<"A car's speed is "<<speed<<"km/h."<<endl;}~Car(){cout << "A car is deleted."<<endl;}
};
class MotoBike:public Vechicle
{
public:MotoBike(int a1):Vechicle(a1){}void show(){cout<<"A motobike's speed is "<<speed<<"km/h."<<endl;}~MotoBike(){cout << "A motobike is deleted."<<endl;}
};
class Person
{
private:string name;
public:Person(string Name):name(Name){}void drive(Vechicle &p){cout<<name<<" drives. ";p.show();}};
int Vechicle::numOfVechicles=0;
int main()
{int cases, n;char c;string name;Vechicle* vechicle;cout<<"In beginning, we have "<<Vechicle::getNumOfVechicles()<<" vechicles."<<endl;cin>>cases;for (int i = 0; i < cases; i++){cin>>name>>c>>n;Person person(name);switch (c){case 'B':vechicle = new Bike(n);break;case 'M':vechicle = new MotoBike(n);break;case 'C':vechicle = new Car(n);break;}person.drive(*vechicle);delete vechicle;}cout<<"At the end, we have "<<Vechicle::getNumOfVechicles()<<" vechicles."<<endl;return 0;
}
  1. 纯虚函数介绍:
    为什么要用纯虚函数?

在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决这个问题,方便使用类的多态性,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。

在什么情况下使用纯虚函数(pure vitrual function)?

1,当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;

2,这个方法必须在派生类(derived class)中被实现;
这里写链接内容

2.析构函数,构造函数中调用虚函数:

1.构造函数跟虚构函数里面都可以调用虚函数,编译器不会报错。
2.C++ primer中说到最好别用
3.由于类的构造次序是由基类到派生类,所以在构造函数中调用虚函数,虚函数是不会呈现出多态的
4.类的析构是从派生类到基类,当调用继承层次中某一层次的类的析构函数时意味着其派生类部分已经析构掉,所以也不会呈现多态
5.因此如果在基类中声明的纯虚函数并且在基类的析构函数中调用之,编译器会发生错误。
提示:
这里写链接内容

Problem I: 不同交通工具的速度相关推荐

  1. python面向对象继承_四. python面向对象(继承)

    一. 继承 class A:pass #父类 基类 超类 class B:pass #父类 基类 超类 class A_son(A,B): pass #子类 派生类 class AB_son(A):p ...

  2. 城市交通出行效率对比分析与思考

    来源:规划与交通 出行效率是指居民以最少的出行投入(包含最少的货币成本和时间成本.最舒适和最安全的出行体验等),利用某种交通方式完成某种出行目的的活动.出行效率强调的是"全过程"出 ...

  3. 04 | 穿越功耗墙,我们该从哪些方面提升“性能”?

    04 | 穿越功耗墙,我们该从哪些方面提升"性能"? 一直以来都知道自己有关计算机底层的知识不是不扎实,前段时间跟着大佬们推荐在[极客时间]买了 徐文浩 老师的专栏 深入浅出计算机 ...

  4. 深入浅出计算机组成原理(四)——穿越功耗墙,我们该从哪些方面提升“性能”?

    文章目录 功耗:CPU 的"人体极限" 并行优化,理解阿姆达尔定律 总结延伸 补充阅读 课后思考 上一讲,在讲 CPU 的性能时,我们提到了这样一个公式: 程序的 CPU 执行时间 ...

  5. 深入计算机组成原理(四)穿越功耗墙,我们该从哪些方面提升“性能”?

    上一讲,在讲CPU的性能时,我们提到了这样一个公式: 程序的CPU执行时间 = 指令数 x CPI x Clock Cycle Time 这样来看,如果要提升计算机的性能,我们可以从指令数.CPI以及 ...

  6. 计算机组成原理 | 穿越功耗墙,我们该从哪些方面提升“性能”?

    上一讲,在讲 CPU 的性能时,我们提到了这样一个公式: 程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time 这么来看,如果要提升计算机的性能,我们可以从指令数.CPI 以 ...

  7. 泰坦以太(以太流说) titan_ysl 2020.01.27

    泰坦以太(以太流说) titan_ysl 2020.01.27 从学习物理到现在,几十年来,我一直认为以太的存在能最合理地解释许多物理现象,但由于一直没人给于其适当的定义,导致其被废弃,从而让现代物理 ...

  8. 重学计算机组成原理(三)- 进击,更强的性能!

    在上一篇中,我们谈到过 程序的CPU执行时间 = 指令数×CPI×Clock Cycle Time 要提升计算机的性能,可以从上面这三方面着手. 通过指令数/CPI,好像都太难了. 因此工程师们,就在 ...

  9. 马斯克畅想的“超级高铁”物理上可行,但面临三大工程挑战

    5 月 29 日消息,据外媒报道,从物理学角度来看,特斯拉首席执行官埃隆・马斯克(Elon Musk)畅想的"超级高铁"(Hyperloop)是可行的,但在实际建造过程中却面临着三 ...

最新文章

  1. UVA11817 Tunnelling the Earth(计算几何、经纬度转空间坐标、球面距离)
  2. 杭电2030java做法_杭电ACM2040java做法
  3. 创业路上的这点事之 从无到有,从有到......
  4. 【转】如何让ucgui支持24位色(24bpp)
  5. 大白话,讲编程之《ES6系列连载》汇总,再也不用翻历史消息了
  6. win7卸载显卡及对应驱动后桌面分辨率不对以及鼠标键盘无反应
  7. 计算机网络与计算机网络连接怎么办,电脑网络连接不上怎么办【是什么原因】...
  8. 第二次公共考试,判断错题集
  9. Ubuntu nginx 1.6.0 服务器 nginx.conf等相关配置
  10. 华为手机从浏览器安装第三方软件签名不一致如何强制安装
  11. 树莓派4b--红外遥控模块
  12. JAVA类加载机制详解
  13. 基于mpvue创建微信小程序项目
  14. 密码学(五):数字签名
  15. iso计算机术语简单解释,计算机网络知识(上)
  16. scratch案例——小游戏制作人物攻击、受伤动作篇
  17. 6个Web前端值得收藏很实用的菜单模板(上)
  18. 计算机学院校园文化标语,智慧校园文明宣传标语
  19. texturepacker 打包图集
  20. 数字世界中的纸张——理解 PDF (转载)

热门文章

  1. 商业数据分析模型及其核心Python代码_持续更新
  2. vue中监听div的滑动到底部 ,并实现懒加载
  3. java判断一天是星期几_java判断今天星期几
  4. vi编辑器全选删除命令ggVGd 全选复制命令(转载)
  5. 如何做才能恢复文件清除的数据
  6. 导出的CSV文件中身份证、银行卡号15位以后数字为0的解决办法
  7. 基于JAVA高校实习管理平台系统计算机毕业设计源码+数据库+lw文档+系统+部署
  8. 读书时如何做读书笔记?
  9. 中国联通云管理研究组组长徐雷:运营商SDN发展策略
  10. 【开发/调试工具】【Windows】嵌入式程序员常用工具类软件/网址一览