C++里多态的概念有点乱,有时间上Wikipedia上搜索了下相关词条,总结如下:
Polymorphism(computer science)
在编程语言和类型理论中,Polymorphism(希腊语,意思为many shape)指的是单个接口对应多个类型实体。作为一个多态类型,它的操作(operation)也可以被提供给其他类型的value。存在几种完全不同类型的多态。
1.Ad hoc polymorphism:函数能够依据参数类型指定不同的实现(depending on a limited range of individually specified types and combinations.)。
其实就是函数重载(function overloading)
2.Parametric polymorphism:编码可以不指定任何特定类型,在被实例化作为参数时才去确定类型。在面向对象编程中,被称为generic programming,而在函数式编程中,则被简称为polymorphism。
在C++里就是模板(template)。
3.Subtyping:名字指定公用超类的不同子类的实例。在面向对象编程中,常被简称为polymorphism。
在C++中就是虚函数(virtual function)。
总结一下,所谓多态,就是指一个接口(interface)对应不同的类型实体。广义的多态,分为三种类型,分别是Ad hoc(同名函数,参数类型不同), Parametirc(运行时推导实际类型), Subtyping(子类从超类继承同名接口,实现不同的行为),分别对应C++中的function overloading, Template 和 virtual function。而C++中所谓的多态,对应的就是Subtyping,通过virtual function的方式来实现。
参考链接:
1. https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
2. https://en.wikipedia.org/wiki/Ad_hoc_polymorphism
3. https://en.wikipedia.org/wiki/Parametric_polymorphism
4. https://en.wikipedia.org/wiki/Subtyping