请设计以下航行器、飞机、船、水上飞机等4个类。
-
CRAFT类为航行器类,是公共基类,提供航行器的基本特性。包括:
一个保护数据成员:speed(速度)。
三个公有成员函数:构造函数(初始化速度)、析构函数和Show函数(显示速度)。
-
PLANE类为飞机类,以公有方式继承CRAFT类,在航行器类的基础上增加飞机的特性。包括:
一个保护数据成员:width(翼展)。
三个公有成员函数:构造函数(初始化速度和翼展)、析构函数和Show函数(显示速度和翼展)。
-
SHIP类为船类,以公有方式继承CRAFT类,在航行器类的基础上增加船的特性。包括:
一个保护数据成员:depth(吃水深度)。
三个公有成员函数:构造函数(初始化速度和吃水深度)、析构函数和Show函数(显示速度和吃水深度)。
-
SEAPLANE类为水上飞机类,同时以公有方式继承PLANE类和SHIP类,兼具飞机和船的特性。包括:
三个公有成员函数:构造函数(初始化速度、翼展、吃水深度)、析构函数和Show函数(显示速度、翼展和吃水深度)。
- 样例一
-
CRAFT *p; p = new CRAFT(87.2); p->Show(); delete p; 创建航行器(速度: 87.2) 航行(速度: 87.2) 销毁航行器(速度: 87.2)
- 样例二
-
CRAFT *p; p = new PLANE(613.5, 45.3); p->Show(); delete p; 创建航行器(速度: 613.5) 创建飞机(翼展: 45.3) 航行(速度: 613.5, 翼展: 45.3) 销毁飞机(翼展: 45.3) 销毁航行器(速度: 613.5)
- 样例三
-
CRAFT *p; p = new SHIP(45.8, 8.3); p->Show(); delete p; 创建航行器(速度: 45.8) 创建船(吃水: 8.3) 航行(速度: 45.8, 吃水: 8.3) 销毁船(吃水: 8.3) 销毁航行器(速度: 45.8)
测试程序
-
#include <iostream> using namespace std; /* 你提交的代码将被嵌在这里 */ int main() { double s, w, d; CRAFT *p; cin >> s >> w >> d; p = new SEAPLANE(s, w, d); p->Show(); delete p; return 0; }
输入样例
-
415.2 36.5 2.1
输出样例 -
创建航行器(速度: 415.2)
创建飞机(翼展: 36.5)
创建船(吃水: 2.1)
创建水上飞机
航行(速度: 415.2, 翼展: 36.5, 吃水: 2.1)
销毁水上飞机
销毁船(吃水: 2.1)
销毁飞机(翼展: 36.5)
销毁航行器(速度: 415.2) -
执行代码
-
class CRAFT { protected: double speed; public: CRAFT(double s) { speed = s; cout << "创建航行器(速度: " << speed << ')' << endl; } virtual void Show() { cout << "航行(速度: " << speed << ')' << endl; } virtual ~CRAFT() { cout << "销毁航行器(速度: " << speed << ')' << endl; } }; class PLANE: virtual public CRAFT { protected: double width; public: PLANE(double s, double w): CRAFT(s), width(w) { cout << "创建飞机(翼展: " << width << ')' << endl; } virtual ~PLANE() { cout << "销毁飞机(翼展: " << width << ')' << endl; } virtual void Show() { cout << "航行(速度: " << speed << ", 翼展: " << width << ')' << endl; } }; class SHIP: virtual public CRAFT { protected: double depth; public: SHIP(double s, double d): CRAFT(s), depth(d) { cout << "创建船(吃水: " << depth << ')' << endl; } virtual void Show() { cout << "航行(速度: " << speed << ", 吃水: " << depth << ')' << endl; } virtual ~SHIP() { cout << "销毁船(吃水: " << depth << ')' << endl; } }; class SEAPLANE: public PLANE, public SHIP {/*这里继承的顺序要先PLANE再SHIP,才能得到输出样例的结果*/ public: SEAPLANE(double s, double w, double d): CRAFT(s), PLANE(s, w), SHIP(s, d) { cout << "创建水上飞机" << endl; } virtual ~SEAPLANE() { cout << "销毁水上飞机" << endl; } virtual void Show() { cout << "航行(速度: " << speed << ", 翼展: " << width << ", 吃水: " << depth << ')' << endl; } };