参考【精选】C++ 多态 超详细讲解_c++实现多态-CSDN博客
C++中重载、重定义、重写概念辨析 - 知乎 (zhihu.com)
c++是面向对象的编程语言,其三大特性为:封装,继承,多态。
封装即抽象为类,继承则是子类对父类的继承,而多态则更难理解一些。多态,多种形态,具体来说,在类中我们有时候会定义同名函数,但他们的函数体不同,会产生不同的行为。
多态,不同对象调用同一函数时,产生不同的行为。其两种体现为重写(override)和重载(overload)。 而重定义未体现多态,但经常和重写一起来做区分。
overload:较简单,即我们在一个类中,会定义几个同名函数,那么在函数名相同的情况下,如何区分进行调用呢? 这时候就看他们的参数列表(参数个数,顺序,类型)的不同。重载,是同一个类中的同名函数,其参数列表不同。
override:发生在继承的过程中,子类对父类中虚函数(virtual)的重新实现。在调用过程中,需要使用基类的指针进行调用,同时子类需要对父类中的虚函数进行重写(函数体)。重写(覆盖),发生在子类和父类的同名函数上,且是虚函数(即要用virtual修饰),其参数列表,返回值类型要求一致。 (ps特殊情况:协变和析构函数,详情参考第一条链接)
以上是多态的两种体现,发生在同一类中,以及不同类中的同名函数。
重定义:也是在继承的过程中,子类和父类中的同名函数,但不是虚函数,而是普通成员函数,这时就是重定义。也就是子类对父类中普通成员函数的重新定义,参数列表可一致也可不同。(这时基类的同名函数被隐藏)
总结:
- 同名函数在同一类中出现,那么是重载overload
- 在不同类中出现(子类和父类的继承),不是重写override(覆盖)就是重定义(隐藏)。