2770 - 飞机类plane(虚函数)
时间限制 : 1 秒
内存限制 : 128 MB
设计一个飞机类plane,由它派生出歼击机fighter类和轰炸机类bomber类,利用虚函数描述飞机类及其派生类族。
飞机类包含:机翼、机身、尾翼、航程、乘员数属性,并且有显示函数display。
歼击机类增加导弹数属性同时有显示函数display。
轰炸机类增加载弹量属性同时有显示函数display。
主函数如下:
int main(){<br />
double aerofoil, airframe, empennage, voyage;//机翼、机身、尾翼、航程
int passenger;//乘员数
int daodan;//导弹数
int zaidan;//载弹量
plane *vp;
char type;
while(cin>>type)
{
if(type=='f')
{cin>>aerofoil>>airframe>>empennage>>voyage>>passenger>>daodan;
fighter fighter1(aerofoil,airframe,empennage,voyage,passenger,daodan);//创建歼击机
vp=&fighter1;
vp->display();//显示歼击机
}
else if(type=='b')
{cin>>aerofoil>>airframe>>empennage>>voyage>>passenger>>zaidan;
bomber bomber1(aerofoil,airframe,empennage,voyage,passenger,zaidan);//创建轰炸机
vp=&bomber1;
vp->display();//显示轰炸机
}
else
break;}
return 0;
}
题目输入
若以f开头,接下来输入的是歼击机的属性,若以b开头,接下来输入的是轰炸机的属性。
题目输出
对应输出派生类族的信息。
输入/输出样例
输入格式
f 10 6 2.5 1800 1 8 b 20 7 3.2 4000 2 6000
输出格式
This is a fighter! 10 6 2.5 1800 1 8 This is a bomber! 20 7 3.2 4000 2 6000
C++解答
#include<iostream> using namespace std; class plane//飞机 { protected: double aerofoil; double airframe; double empennage; double voyage; int passenger; public: void virtual display()=0; plane(double aerofoil1,double airframe1,double empennage1,double voyage1,int passenger1) { aerofoil=aerofoil1; airframe=airframe1; empennage=empennage1; voyage=voyage1; passenger=passenger1; } }; void plane::display() { cout<<aerofoil<<" "<<airframe<<" "<<empennage<<" "<<voyage<<" "<<passenger<<endl; } class fighter:public plane//歼击机 { public: fighter(double aerofoil,double airframe,double empennage,double voyage,int passenger, int daodan):plane(aerofoil,airframe,empennage,voyage,passenger){ missile=daodan; } void display() {cout<<"This is a fighter!"<<endl; cout<<aerofoil<<" "<<airframe<<" "<<empennage<<" "<<voyage<<" "<<passenger<<" "<<missile<<endl; } protected: int missile; }; class bomber:public plane//轰炸机 { public: bomber(double aerofoil,double airframe,double empennage,double voyage,int passenger,int zaidan): plane(aerofoil,airframe,empennage,voyage,passenger){ bomb=zaidan; } void display(){ cout<<"This is a bomber!"<<endl; cout<<aerofoil<<" "<<airframe<<" "<<empennage<<" "<<voyage<<" "<<passenger<<" "<<bomb<<endl; } protected: int bomb; }; int main(){ double aerofoil, airframe, empennage, voyage;//机翼、机身、尾翼、航程 int passenger;//乘员数 int daodan;//导弹数 int zaidan;//载弹量 plane *vp; char type; while(cin>>type) { if(type=='f') {cin>>aerofoil>>airframe>>empennage>>voyage>>passenger>>daodan; fighter fighter1(aerofoil,airframe,empennage,voyage,passenger,daodan);//创建歼击机 vp=&fighter1; vp->display();//显示歼击机 } else if(type=='b') {cin>>aerofoil>>airframe>>empennage>>voyage>>passenger>>zaidan; bomber bomber1(aerofoil,airframe,empennage,voyage,passenger,zaidan);//创建轰炸机 vp=&bomber1; vp->display();////显示轰炸机 } else break;} return 0; }