马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
那为什么不最开始就定义指向子类的指针,一定要先定义成虚函数,后面又定义指向基类的指针?这样不是也可以么?
当然是可以的啊,不过这里先定义成虚函数,后面又定义基类指针,是为了显示出,子类对象传给基类指针,能够自动识别出是某个基类的方法被调用。
这就是多态!
|