奋哥:当面试官问你什么和什么的区别时,只要回答两者的定义和特点,不要真的去答有什么什么区别
1. 大家都知道多态的三个条件:继承,重写,父类引用指向子类对象
2. 关于多态下面举个例子就明白了:
如我们定义了一个动物类,动物都有一个共同的行为就是呼吸,那么把呼吸定义在基类中(这很好理解)。
在设计软件时我们可能会基于程序的灵活性或算法特殊要求而使用基类指针来调用派生类的方法。
比如基于上述类我们开发一个展示动物呼吸的程序,定义了几百种动物并实现了每种动物的breathe方法,使用者通过鼠标点击决定看哪一种动物的呼吸方式。
设计时考虑到,使用者并不是每次都想看完这几百种动物的呼吸,所以我们没有必要预先产生各种动物的对象,而只要在使用者点了某种动物后使用new操作符动态创建该对象即可,这样可以简化程序设计和节省内存空间。
class animal
{
...
virtual void breathe() //注意这是虑函数
{
cout<<"animal breathe"<<endl;
}
};
class fish:public animal
{
...
void breathe()
{
cout<<"fish bubble"<<endl;
}
};
class cat:public animal
{
...
void breathe()
{
cout<<"cat bubble"<<endl;
}
};
void main()
{
animal* pAn;
switch(用户选择)
{
case fish:
pAn = new fish;
break;
case cat:
pAn = new cat;
break;
....
}
pAn->breathe();
delete pAn;
}
}
当用户选鱼时输出:fish breathe
当用户选猫时输出:cat breathe
但是如果你将基类的breathe函数virtual申明除掉,那么不管你怎么选都是输出
animal breathe
3. 多态是基于对抽象方法的覆盖来实现的,用统一的对外接口来完成不同的功能。重载也是用统一的对外接口
来完成不同的功能。那么两者有什么区别呢?原文:http://blog.csdn.net/basementman/article/details/19415723