鱼C论坛

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

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

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

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

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

x
#include <iostream>

class Pet
{
public:
        virtual void play();
};

class Cat : public Pet
{
public:
        void play();
};

class Dog : public Pet
{
public:
        void play();
};

void Pet::play()
{
        std::cout << "宠物在玩!!" << std::endl; 
}

void Cat::play()
{
        Pet::play();
        std::cout << "猫猫在玩!!" << std::endl; 
}

void Dog::play() 
{
        Pet::play() ;
        std::cout << "狗狗在玩!!" << std::endl;
}

int main()
{
        Pet *cat = new Cat;
        Pet *dog = new Dog;
        
        cat->play();
        dog->play();
        
        return 0;
}

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

class Pet
{
public:
        void play();
};

class Cat : public Pet
{
public:
        void play();
};

class Dog : public Pet
{
public:
        void play();
};

void Pet::play()
{
        std::cout << "宝宝在玩!!" << std::endl; 
}

void Cat::play()
{
        Pet::play();
        std::cout << "猫猫在玩!!" << std::endl; 
}

void Dog::play() 
{
        Pet::play() ;
        std::cout << "狗狗在玩!!" << std::endl;
}

int main()
{
        Cat *cat = new Cat;
        Dog *dog = new Dog;
        
        cat->play();
        dog->play();
        
        return 0;
}
最佳答案
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-11-28 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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