6-29 水上飞机(*) (20分)多重继承
-
飛機類,同時以公有方式繼承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{//這里的是 public
??? public:
?? ??? ?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 部分
總結
以上是生活随笔為你收集整理的6-29 水上飞机(*) (20分)多重继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用API(一)
- 下一篇: (基础知识)单反镜头的参数辨别