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

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

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1897   Solved: 874
[ Submit][ Status][ Web Board]

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()方法。其中“$”是name的值。

Input

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

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

Output

见样例及题目描述。

Sample Input

3Tom B 15Jack M 50Mary 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.

HINT

Append Code



#include <iostream>
#include <cstdio>
#include <string>
#include <iomanip>

using namespace std;

class Vechicle
{
protected:
	int speed;
	static int numOfVechicles;
public:
	Vechicle(int s) :speed(s){ numOfVechicles++; }
	static int getNumOfVechicles(){ return numOfVechicles; }
	virtual ~Vechicle(){ cout << "A vechicle is deleted.\n"; }
	virtual void show()  = 0;
};
class Bike : public Vechicle
{
public:
	Bike(int s):Vechicle(s){}
	void show()
	{
		cout << "A bike's speed is " <<speed<< " km/h.\n";
	}
	~Bike()
	{
		cout << "A bike is deleted.\n";
	}
};
class MotoBike : public Vechicle
{
public:
	MotoBike(int s) :Vechicle(s){}
	void show()
	{
		cout << "A motobike's speed is " << speed << " km/h.\n";
	}
	~MotoBike()
	{
		cout << "A motobike is deleted.\n";
	}
};
class Car : public Vechicle
{
public:
	Car(int s) :Vechicle(s){}
	void show()
	{
		cout << "A car's speed is " << speed << " km/h.\n";
	}
	~Car()
	{
		cout << "A car is deleted.\n";
	}
};
class Person
{
protected:
	string name;
public:
	void drive(Vechicle &p)
	{
		cout << name << " drives. ";
		p.show();
	}
	Person(string n) :name(n){}
};
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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值