虚函数

#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;
}
执行结果:
动物特征:不一样
动物食物:不一样

长颈鹿特征:脖子长
长颈鹿食物:树叶

动物特征:不一样
长颈鹿食物:树叶

============================
大象特征:长鼻子
大象食物:草

动物特征:不一样
大象食物:草

============================
简单说下关于虚函数的
咱们在基类中定义一个虚函数,若是只是基类对象去调用,那没什么区别。如今的问题是,基类指针是能够指向派生类对象的地址的,那么到底调用的是哪个呢?若是是普通函数,那是按基类中的函数来作,若是是虚函数,则按派生类的来作
相关文章
相关标签/搜索