6-1 水上飞机*
请设计以下航行器、飞机、船、水上飞机等 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)
- 样例四
CRAFT *p; p = new SEAPLANE(415.2, 36.5, 2.1); p->Show(); delete p;创建航行器(速度: 415.2) 创建飞机(翼展: 36.5) 创建船(吃水: 2.1) 创建水上飞机 航行(速度: 415.2, 翼展: 36.5, 吃水: 2.1) 销毁水上飞机 销毁船(吃水: 2.1) 销毁飞机(翼展: 36.5) 销毁航行器(速度: 415.2)裁判程序
#includeusing 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; } 输入样例
583.6 48.2 3.8输出样例
创建航行器(速度: 583.6) 创建飞机(翼展: 48.2) 创建船(吃水: 3.8) 创建水上飞机 航行(速度: 583.6, 翼展: 48.2, 吃水: 3.8) 销毁水上飞机 销毁船(吃水: 3.8) 销毁飞机(翼展: 48.2) 销毁航行器(速度: 583.6)
class CRAFT { protected:double m_speed; public:CRAFT(double a) :m_speed(a){cout << "创建航行器(速度: " << m_speed << ")" << endl;}virtual ~CRAFT()//一定要是virtual,不然后面的析构都没办法进行{cout << "销毁航行器(速度: " << m_speed << ")";}virtual void Show(){cout << "航行(速度: " << m_speed << ")" << endl;} };class PLANE :virtual public CRAFT {//关键字 virtualprotected:double m_width; public:PLANE(double a, double b) :CRAFT(a), m_width(b){cout << "创建飞机(翼展: " << m_width << ")" << endl;}~PLANE(){cout << "销毁飞机(翼展: " << m_width << ")" << endl;}void Show(){cout << "航行(速度: " << m_speed << ", 翼展: " << m_width << ")" << endl;}};class SHIP :virtual public CRAFT {//关键字 virtualprotected:double m_depth; public:SHIP(double a, double b) :CRAFT(a), m_depth(b){cout << "创建船(吃水: " << m_depth << ")" << endl;}~SHIP(){cout << "销毁船(吃水: " << m_depth << ")" << endl;}void Show() {cout << "航行(速度: " << m_speed << ", 吃水: " << m_depth << ")" << endl;} };class SEAPLANE :public PLANE, public SHIP {public:SEAPLANE(double a, double b, double c) :PLANE(a, b), SHIP(a, c), CRAFT(a){cout << "创建水上飞机" << endl;}~SEAPLANE(){cout << "销毁水上飞机" << endl;}void Show() {cout << "航行(速度: " << PLANE::m_speed << ", 翼展: " << m_width << ", 吃水: " << m_depth << ")" << endl;} };
6-3 猪上树
已知Pig类是MagicPig类的父类,根据以下主函数完成上述两个类的定义,以实现规定的输出。不允许改变主函数的内容。
裁判测试程序样例:
#includeusing namespace std; /* 请在这里填写答案 */int main() {Pig *p1 = new Pig; Pig *p2 = new MagicPig; cout << endl; p1->climb(); p2->climb(); cout << endl; delete p1; delete p2; return 0; } 输入样例:
无输入
输出样例:
Pig 申请了空间... Pig 申请了空间... MagicPig 申请了空间...我只是个平凡的猪猪。 我能上树了耶!Pig 释放了空间... MagicPig 释放了空间... Pig 释放了空间...
class Pig { public:Pig() {cout << "Pig 申请了空间..." << endl;}virtual ~Pig(){cout << "Pig 释放了空间..." << endl;}virtual void climb(){cout << "我只是个平凡的猪猪。" << endl;} }; class MagicPig :public Pig { public:MagicPig() { cout << "MagicPig 申请了空间..." << endl;}~MagicPig() { cout << "MagicPig 释放了空间..." << endl;}void climb() { cout << "我能上树了耶!"<
鸽子起飞
下一篇:女人如何向男人表达爱意