大部分内容参考于程序员面试宝典
多态性可以简单理解为“一个接口,多种方法”。在程序运行的过程中才决定调用的函数。
比较形象的一个例子:
开电视,开窗户,开门,这里的“开”就是多态(到底准备开什么的意思)。
多态性允许你将父对象设置成为和它的一个或更多的子对象相等的技术,即允许将子类类型的指针赋值给父类类型的指针。c++中的多态性是通过虚函数实现的。
虚函数就是允许被其子类重新定义的成员函数。
现在说下多态的作用:
我们知道封装可以隐藏实现细节,使得代码模块化,继承可以扩展已存在的代码模块。他们的目的都是为了代码重用。而多态的目的是为了接口重用
接口重用在多态中是能够通过父类指针来调用子类的方法,达到一个指针能够达到重复使用的目的(即接口重用)
c++代码
#include <iostream>
using namespace std;
class parent
{
public:
virtual void f1(){cout<<"f1 from parent"<<endl;}//虚函数
void f2(){cout<<"f2 from parent"<<endl;}
};
class son:public parent//继承
{
public:
void f1(){cout<<"f1 from son"<<endl;}
void f2(){cout<<"f2 from son"<<endl;}
};
int main()
{
parent *p1=new parent();
p1->f1();
p1->f2();
parent *p2=new son();//覆盖问题
p2->f1();
p2->f2();
return 0;
}
运行结果
解析:前两个输出应该不难理解,这里说下第三个输出
parent类中的f1函数是虚函数,虚函数是被子类同名所覆盖的。而parent类中f2是一个普通函数,不会被子类同名覆盖。
p2是一个指针,指向对象,由于parent类里的f1函数被son类里的f1函数所覆盖,所以输出f1 from son