一、多态介绍
面向对象的核心思想是多态性,其含义是“多种形式”
概念:在子类覆盖了父类函数的情况下,用父类的指针(或引用)调用子类对象,或者通过父类指针调用覆盖函数的时候(动态绑定),实际上调用的是子类的覆盖版本,这种现象叫做多态
注意事项:
只有用父类的指针(或引用)调用子类对象多态才会产生,非指针/引用不会产生多态
且只有用父类的指针(或引用)调用虚函数才会产生多态,调用非虚函数不会产生多态效果
运行时解析:
当我们使用基类的引用或指针调用基类中定义的一个虚函数时,我们并不知道该函数真正作用的对象是什么类型,因为它可能是一个基类的对象也可能是一个派生类的对象
如果该函数是虚函数,则直到运行时才会决定到底执行哪个版本。非虚函数的调用在编译时进行绑定的,类似的,通过对象进行的函数(虚函数或非虚函数)调用也在编译时绑定
二、多态的条件
父子类之间有覆盖关系
基类必须通过引用或指针指向子类,然后再调用虚函数,此时就可以实现多态
三、演示案例
class A{public://虚函数virtual void show()const { cout &