虛函數

#include "stdafx.h"
#include "iostream.h"

//////////////////////////////////////動物類
class animal
{
public:
  void character();
  virtual food();

};
void animal::character()
{
  cout<<"動物特徵:不同"<<endl;
}
animal::food()
{
  cout<<"動物食物:不同"<<endl<<endl;
}

////////////////////////////////////////長頸鹿類
class giraffe:public animal
{
public:
  void character();
  virtual food();
};
void giraffe::character()
{
  cout<<"長頸鹿特徵:脖子長"<<endl;
}
giraffe::food()
{
  cout<<"長頸鹿食物:樹葉"<<endl<<endl;
}

////////////////////////////////////////大象類
class elephant:public animal
{
public:
  void character();
  virtual food();
};
void elephant::character()
{
  cout<<"大象特徵:長鼻子"<<endl;
}
elephant::food()
{
  cout<<"大象食物:草"<<endl<<endl;
}

//////////////////////////////////////////一個形參爲基類指針的函數
void f(animal *p)
{
  p->character();
  p->food();
  cout<<"============================"<<endl;
}

//////////////////////////////////////////main主函數
int main()
{
  animal p1;
  p1.character();
  p1.food();

  giraffe p2;
  p2.character();
  p2.food();
  f(&p2);//基類的指針可以指向其派生類的地址

  elephant p3;
  p3.character();
  p3.food();
  f(&p3);

  return 0;
}
執行結果:
動物特徵:不同
動物食物:不同

長頸鹿特徵:脖子長
長頸鹿食物:樹葉

動物特徵:不同
長頸鹿食物:樹葉

============================
大象特徵:長鼻子
大象食物:草

動物特徵:不同
大象食物:草

============================
簡單說下關於虛函數的
我們在基類中定義一個虛函數,如果只是基類對象去調用,那沒什麼區別。現在的問題是,基類指針是可以指向派生類對象的地址的,那麼到底調用的是哪一個呢?如果是普通函數,那是按基類中的函數來做,如果是虛函數,則按派生類的來做


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