虛函數

#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;
}
執行結果:
動物特徵:不一樣
動物食物:不一樣

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

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

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

動物特徵:不一樣
大象食物:草

============================
簡單說下關於虛函數的
咱們在基類中定義一個虛函數,若是隻是基類對象去調用,那沒什麼區別。如今的問題是,基類指針是能夠指向派生類對象的地址的,那麼到底調用的是哪個呢?若是是普通函數,那是按基類中的函數來作,若是是虛函數,則按派生類的來作
相關文章
相關標籤/搜索