在基类与子类函数名相同的前提下,根据参数是否相同、是否具有vritual关键字,可分为4种情况:
参数相同、有virtual关键字:多态重写;
参数相同、无virtual关键字:隐藏;与重写区分。
参数不同、有virtual关键字:隐藏;与重载区分。
参数不同、无virtual关键字:隐藏;与重载区分。
除了重载与覆盖(重写),C++还有隐藏。隐藏是指派生类的函数屏蔽了与其同名的基类函数。隐藏规则如下:
如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆,重载是在同一个类中发生)。
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆,覆盖有virtual关键字)。
在非构造函数,非析构函数的成员函数中调用「虚函数」,是多态!!!