鱼C论坛

 找回密码
 立即注册
查看: 1237|回复: 1

[已解决]c++ 虚方法指针为什么要指向基类

[复制链接]
发表于 2017-6-18 15:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>

  2. class Pet
  3. {
  4. public:
  5.         virtual void play();
  6. };

  7. class Cat : public Pet
  8. {
  9. public:
  10.         void play();
  11. };

  12. class Dog : public Pet
  13. {
  14. public:
  15.         void play();
  16. };

  17. void Pet::play()
  18. {
  19.         std::cout << "宠物在玩!!" << std::endl;
  20. }

  21. void Cat::play()
  22. {
  23.         Pet::play();
  24.         std::cout << "猫猫在玩!!" << std::endl;
  25. }

  26. void Dog::play()
  27. {
  28.         Pet::play() ;
  29.         std::cout << "狗狗在玩!!" << std::endl;
  30. }

  31. int main()
  32. {
  33.         Pet *cat = new Cat;
  34.         Pet *dog = new Dog;
  35.        
  36.         cat->play();
  37.         dog->play();
  38.        
  39.         return 0;
  40. }
复制代码


定义指向基类Pet的指针,调用被覆盖的play()函数。这里使用了虚方法。那为什么不最开始就定义指向子类的指针,一定要先定义成虚函数,后面又定义指向基类的指针?这样不是也可以么?

  1. #include <iostream>

  2. class Pet
  3. {
  4. public:
  5.         void play();
  6. };

  7. class Cat : public Pet
  8. {
  9. public:
  10.         void play();
  11. };

  12. class Dog : public Pet
  13. {
  14. public:
  15.         void play();
  16. };

  17. void Pet::play()
  18. {
  19.         std::cout << "宝宝在玩!!" << std::endl;
  20. }

  21. void Cat::play()
  22. {
  23.         Pet::play();
  24.         std::cout << "猫猫在玩!!" << std::endl;
  25. }

  26. void Dog::play()
  27. {
  28.         Pet::play() ;
  29.         std::cout << "狗狗在玩!!" << std::endl;
  30. }

  31. int main()
  32. {
  33.         Cat *cat = new Cat;
  34.         Dog *dog = new Dog;
  35.        
  36.         cat->play();
  37.         dog->play();
  38.        
  39.         return 0;
  40. }
复制代码
最佳答案
2017-6-18 16:59:21
那为什么不最开始就定义指向子类的指针,一定要先定义成虚函数,后面又定义指向基类的指针?这样不是也可以么?


当然是可以的啊,不过这里先定义成虚函数,后面又定义基类指针,是为了显示出,子类对象传给基类指针,能够自动识别出是某个基类的方法被调用。

这就是多态!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-18 16:59:21 | 显示全部楼层    本楼为最佳答案   
那为什么不最开始就定义指向子类的指针,一定要先定义成虚函数,后面又定义指向基类的指针?这样不是也可以么?


当然是可以的啊,不过这里先定义成虚函数,后面又定义基类指针,是为了显示出,子类对象传给基类指针,能够自动识别出是某个基类的方法被调用。

这就是多态!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表