一.客货两用车(对应复习点:水上飞机)
请设计以下汽车、客车、货车、客货两用车等4个类。
-
CAR 为汽车类,是公共基类,提供汽车的基本功能。包括:
一个保护数据成员:speed(速度)。
三个公有成员函数:构造函数(初始化速度)、析构函数和 Show 函数(显示速度)。
-
BUS 为客车类,以公有方式继承 CAR 类,在汽车类的基础上增加客运功能。包括:
一个保护数据成员:seat(载客量)。
三个公有成员函数:构造函数(初始化速度和载客量)、析构函数和 Show 函数(显示速度和载客量)。
-
TRUCK 为货车类,以公有方式继承 CAR 类,在汽车类的基础上增加货运功能。包括:
一个保护数据成员:load(载货量)。
三个公有成员函数:构造函数(初始化速度和载货量)、析构函数和 Show 函数(显示速度和载货量)。
-
VAN 为客货两用车类,同时以公有方式继承 BUS 类和 TRUCK 类,兼具客运和货运功能。包括:
三个公有成员函数:构造函数(初始化速度、载客量、载货量)、析构函数和 Show 函数(显示速度、载客量和载货量)。
测试用例
- 样例一
CAR *p; p = new CAR(25.3); p->Show(); delete p;
创建汽车(25.3公里/小时)
汽车: 25.3公里/小时
销毁汽车(25.3公里/小时)
- 样例二
CAR *p; p = new BUS(58.5, 45); p->Show(); delete p;
创建汽车(58.5公里/小时)
创建客车(45人)
客车: 58.5公里/小时, 45人
销毁客车(45人)
销毁汽车(58.5公里/小时)
- 样例三
CAR *p; p = new TRUCK(208.5, 350.8); p->Show(); delete p;
创建汽车(208.5公里/小时)
创建货车(350.8吨)
货车: 208.5公里/小时, 350.8吨
销毁货车(350.8吨)
销毁汽车(208.5公里/小时)
- 样例四
CAR *p; p = new VAN(125.6, 5, 2.5); p->Show(); delete p;
创建汽车(125.6公里/小时)
创建客车(5人)
创建货车(2.5吨)
创建客货两用车
客货两用车: 125.6公里/小时, 5人, 2.5吨
销毁客货两用车
销毁货车(2.5吨)
销毁客车(5人)
销毁汽车(125.6公里/小时)
裁判程序
#include <iostream> using namespace std; /* 你提交的代码将被嵌在这里 */ int main() { CAR *p; double s, t, w; cin >> s, t, w; p = new VAN(s, t, w); p->Show(); delete p; return 0; }
输入样例
80.5 6 1.2
输出样例
创建汽车(80.5公里/小时)
创建客车(6人)
创建货车(1.2吨)
创建客货两用车
客货两用车: 80.5公里/小时, 6人, 1.2吨
销毁客货两用车
销毁货车(1.2吨)
销毁客车(6人)
销毁汽车(80.5公里/小时)
代码
class CAR
{
protected:
double speed;
public:
CAR(double s) :speed(s)
{
cout << "创建汽车(" << speed << "公里/小时)" << endl;
}
virtual void Show()
{
cout << "汽车: " << speed << "公里/小时" << endl;
}
virtual ~CAR()
{
cout << "销毁汽车(" << speed << "公里/小时)" << endl;
}
};
class BUS :public virtual CAR
{
protected:
double seat;
public:
BUS(double s, double se) :CAR(s), seat(se)
{
cout << "创建客车(" << seat << "人)" << endl;
}
~BUS()override
{
cout << "销毁客车(" << seat << "人)" << endl;
}
void Show()override
{
cout << "客车: " << speed << "公里/小时, " << seat << "人" << endl;
}
};
class TRUCK :public virtual CAR
{
protected:
double load;
public:
TRUCK(double s, double l) :CAR(s), load(l)
{
cout << "创建货车(" << load << "吨)" << endl;
}
void Show()override
{
cout << "货车: " << speed << "公里/小时, " << load << "吨" << endl;
}
~TRUCK()override
{
cout << "销毁货车(" << load << "吨)" << endl;
}
};
class VAN : public virtual BUS, public virtual TRUCK
{
public:
VAN(double s, double se, double l) :CAR(s), BUS(s, se), TRUCK(s, l)
{
cout << "创建客货两用车" << endl;
}
~VAN()override
{
cout << "销毁客货两用车" << endl;
}
void Show()override
{
cout << "客货两用车: " << speed << "公里/小时, " << seat << "人, " << load << "吨" << endl;
}
};
二.运动成绩排名(对应**一道包含对象数组和排序的问题)
三.计算全班学生C++课程的总成绩和平均成绩
四 .Shape抽象类--通过定义一个基类的指针来访问基类的两个函数
void print(Shape* shape)
{
cout << "Area:" << shape->getArea() << endl << "Perimeter:" << shape->getPerim() << endl;
}
五.二维向量相加(C++ 运算符重载):运算符重载通常是通过成员函数或全局(非成员)函数来实现的。如果您选择成员函数,那么它只能有一个显式参数
错误示范:
TDVector operator+(TDVector& b, TDVector& a)
{
TDVector c;
c.x = a.x + b.x;
c.y = a.y + b.y;
return c;
}
正确
TDVector operator+(TDVector&a)
{
TDVector c;
c.x=this->x+a.x;
c.y=this->y+a.y;
}
友元提高程序的运行效率,类的默认访问属性是私有
六虚函数的应用,学生成绩的输入和输出