-
飞机类,同时以公有方式继承PLANE类和SHIP类,兼具飞机和船的特性。包括:
三个公有成员函数:构造函数(初始化速度、翼展、吃水深度)、析构函数和Show函数(显示速度、翼展和吃水深度)。
测试用例
1) 样例一
CRAFT *p;
p = new CRAFT(87.2);
p->Show();
delete p;
创建航行器(速度: 87.2)
航行(速度: 87.2)
销毁航行器(速度: 87.2)
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)
3) 样例三
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)
4) 样例四
CRAFT *p;
p = new SEAPLANE(415.2, 36.5, 2.1);
p->Show();
delete p;
创建航行器(速度: 415.2)
创建飞机(翼展: 36)
创建船(吃水: 2.1)
创建水上飞机
航行(速度: 415.2, 翼展: 36, 吃水: 2.1)
销毁水上飞机
销毁船(吃水: 2.1)
销毁飞机(翼展: 36)
销毁航行器(速度: 415.2)
测试程序
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
CRAFT *p;
p = new SEAPLANE(415.2, 36.5, 2.1);
p->Show();
delete p;
return 0;
}
#### 输出样例
```out
创建航行器(速度: 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 a):speed(a)
{cout<<"创建航行器(速度: "<<speed<<")"<<endl;}
virtual ~CRAFT()//一定要是virtual,不然后面的析构都没办法进行
{cout<<"销毁航行器(速度: "<<speed<<")"<<endl;}
virtual void Show()
{cout<<"航行(速度: "<<speed<<")"<<endl;}
};
class PLANE:virtual public CRAFT{//关键字 virtual
protected:
double wi;
public:
PLANE(double a,double b):CRAFT(a),wi(b)
{cout<<"创建飞机(翼展: "<<wi<<")"<<endl;}
~PLANE()
{cout<<"销毁飞机(翼展: "<<wi<<")"<<endl;}
void Show()
{cout<<"航行(速度: "<<speed<<", 翼展: "<<wi<<")"<<endl; }
};
class SHIP:virtual public CRAFT{//关键字 virtual
protected:
double de;
public:
SHIP(double a,double b):CRAFT(a),de(b)
{cout<<"创建船(吃水: "<<de<<")"<<endl;}
~SHIP()
{cout<<"销毁船(吃水: "<<de<<")"<<endl;}
void Show(){
cout<<"航行(速度: "<<speed<<", 吃水: "<<de<<")"<<endl;
}
};
class SEAPLANE:public PLANE,public SHIP{//这里的是 publicpublic:
SEAPLANE(double a,double b,double c):PLANE(a,b),SHIP(a,c),CRAFT(a)//这里有CRAFT 的初始化
{
cout<<"创建水上飞机"<<endl;
}
~SEAPLANE()
{cout<<"销毁水上飞机"<<endl;}
void Show(){
cout<<"航行(速度: "<<PLANE::speed <<", 翼展: "<<wi<<", 吃水: "<<de<<")"<<endl;
}
};
相似的例子在2020下 cpp课件Part_three One 部分