第十四周 閱讀程序 (2)

/
*   
* 程序的版權和版本聲明部分   
* Copyright (c)2013, 煙臺大學計算機學院學生   
* All rightsreserved.   
* 文件名稱:  
* 作者:袁靜   
* 完成日期: 2013年6月4日   
* 版本號: v1.0   
* 輸入描述:無   
* 問題描述   
* 程序輸出:  
*/    


//回答:如果將Vehicle類的定義修改爲虛函數,其餘不變。當基類的指針指向派生類是,用指針調用同名虛成員函數,
       執行的是基類的成員函數還是派生類的成員函數?爲什麼?什麼是派生類?
//

#include <iostream>
using namespace std;
class Vehicle
{
public:
      virtual void run() const
      {
          cout<<"run a Vehicle."<<endl;
      }
};
class Car:public Vehicle
{

public:
      void run() const
      {
          cout<<"run a Car."<<endl;
      }
};
class Airplane:public Vehicle
{
public:
      void run () const
      {
          cout<<"run a Airplane."<<endl;

      }
};
int main()
{
    cout<<"1.直接用第用對象訪問成員函數:"<<endl;
    Vehicle v;
    v.run();
    Car c;
    c.run();
    Airplane a;
    a.run();
    cout<<"2.用指針基類的指針訪問成員函數:"<<endl;
    Vehicle *vp;
    vp=&c;
    vp->run();
    vp=&a;
    vp->run();
    return 0;

}


答:
  1.)執行的是派生類的成員函數。
  2.)本來基類指針是用來指向基類對象的,如果用他指向派生類對象,則自動進行指針類型的轉換,將派生類的
 對象的指針轉換爲基類的指針,這樣基類指針指向的是派生類對象中的積累部分。在把Vehicle改爲虛函數之前,
 是無法通過基類指針去調用派生類對象中的成員函數的。虛函數打破之一限制,在基類中run被聲明爲虛函數,在
 聲明派生類是被重載,這時派生類中的同名函數就取代了基類中的虛函數。因此,在使基類指針指向派生類對象後,調用
 run函數就調用了派生類的run函數
 
 3.)由虛函數實現的動態多樣性就是:同一類族中不同對象,對同一函數調用做出不同的響應

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章