Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152157
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: C/C++

2016-03-31 10:10:52

有了虚函数,就可以实现通过基类的指针或者基类的引用调用到派生类的函数,这个太强大了。

也就是把通过基类的指针或者引用调用虚函数的代码写在那里不动,将来你新写了派生类并实现了虚函数,那些本来的代码就能调用到你新写的虚函数。

点击(此处)折叠或打开

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. static int Line =1;
  5.  
  6. class CAnimal
  7. {
  8. protected:
  9.    char *name;
  10. public:
  11.    CAnimal(char *na){
  12.       name = new char[strlen(na)+1];
  13.       strcpy(name, na);
  14.    }
  15.    virtual void display(){cout<<Line++<<" 动物(食草、食肉)"<<endl;}
  16. };
  17.  
  18. class CHerbivorous:public CAnimal
  19. {
  20. public:
  21.    CHerbivorous(char *na):CAnimal(na){}
  22.    void display(){cout<<Line++<<" 食草动物: "<<name<<endl;}
  23. };
  24.  
  25. class CCarnivore:public CAnimal
  26. {
  27. public:
  28.    CCarnivore(char *na):CAnimal(na){}
  29.    void display(){cout<<Line++<<" 食肉动物: "<<name<<endl;}
  30. };
  31.  
  32. int main(void)
  33. {
  34.    CAnimal animal(""), *ptrAni;
  35.    ptrAni = &animal;
  36.    ptrAni->display();
  37.  
  38.    CHerbivorous herb("小羊");
  39.    ptrAni = &herb;
  40.    ptrAni->display();
  41.    ((CHerbivorous *)ptrAni)->display();
  42.  
  43.    CCarnivore carn("老虎");
  44.    ptrAni = &carn;
  45.    ptrAni->display();
  46.    ((CCarnivore *)ptrAni)->display();
  47.  
  48.    return 0;
  49. }

阅读(1372) | 评论(0) | 转发(0) |
0

上一篇:18、运算符重载

下一篇:20、虚函数重载

给主人留下些什么吧!~~