天天看點

C++基類和派生類

.基類和派生類關系

任何一個類都有可以派生出上個新類,派生類也可以再派生出新類,是以,基類和派生類是相對而言的。一個基類可以是另一個基類的派生類,這樣便形成了複雜的繼承結構,出現了類的層次。一個基類派生出一個派生類,它又做另一個派生類的基類,則原來基類為該派生類的間接基類。

基類與派生類之間的關系可以有如下幾種描述:

1 派生類是基類的具體化

類的層次通常反映了客觀世界中某種真實的模型。例如,定義輸入裝置為基類,而鍵盤、滑鼠器和數字化闆将是派生類,它們關系如圖6-3所示,在這種情況下,不難看出:基類是對若于個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共牲,而派生類通過增加行為将抽象類變為某種有用的類型。

2 派生類是基類定義的延續

先定義一個抽象基類,該基類中有些操作并未實作。然後定義非抽象的派生類,實作抽象基類中定義的操作。例如,虛函數就屬此類情況。這時,派生類是抽象的基類的實作,即可看成是基類定義的延續。這也是派生類的一種常用的方法。

3 派生類是基類的組合

在多繼承時,一個派生類有多于一個的基類,這時派生類将是所有基類行為的組合。如上述派生類風扇台燈類就是基類風扇類和台燈類的組合。

例題6-1

下面定義了一個關于交通工具的類

 class vehicle

 {

  int wheels; //輪子數

  float weight; //重量

  public:

  void initialize(int in_wheels, float in_weight);

  int get_wheels( ) {return wheels;}

  float get_weight( ) {return weight;}

  float wheel_loading( ) {return weight/wheels;}

 };

  如果要再定義一個小轎車的類和一個卡車的類,如何實作呢?這裡我們就要用到面向對象程式設計的另一個機制--繼承。現實世界的物質多種多樣,但許多物質都存在着層次關系,這種層次結構是我們找到了描述事物的解決方法。

下面通過繼承來派生出小汽車和卡車的類。

 //小汽車的類

 class car : public vehicle

 {

  int passenger_load; //載客數

  public:

  void initialize(int in_wheels, float in_weight, int people = 4);

  int passengers( ) {return passenger_load;}

 };

 //卡車的類

 class truck : public vehicle

 {

  int passenger_load; //載客數

  float payload; //有效負載

  public:

  void init_truck(int how_many = 2, float max_load = 24000.0);

  float efficiency( ); //馬力

  int passengers( ) {return passenger_load;}

 };

  說明:上面通過繼承從類vehicle中派生出了car和truck兩個類。我們把vehicle稱為基類,把car和truck稱為派生類或子類

繼續閱讀