(下述<函数参数相同>是指 参数个数 、 参数类型 和 返回类型 均相同)
一、重载(overload):
特征: 函数名相同 、函数参数不同、 必须位于同一个域(类)中;
二、覆盖(重写)(override):
特征: 函数名相同 、函数参数相同、 分别位于派生类和基类中、virtual(虚函数);
三、隐藏(hide):
特征:
函数名相同、参数不同、分别位于派生类和基类中、无论父类中的同名函数是否含有virtual关键字,(即与重载的区别是两个函数是否在同一个域(类)中);
函数名相同、参数相同,但是基类函数没有 virtual关键字,此时,基类的函数被隐藏(注意别与覆盖混淆);
即:派生类中函数隐藏(屏蔽)了基类中的同名函数。
关于隐藏的理解,在调用一个类的成员函数时,编译器会沿着类的继承链逐级向上查找函数的定义,如果找到了则停止查找;所以如果一个派生类和一个基类都有一个同名函数(不论函数参数是否相同),而编译器最终选择了在派生类中的函数,那么就说这个派生类的成员函数“隐藏”了基类的同名函数,即它阻止了编译器继续向上查找函数的定义。(所以同名函数,虽函数参数不同,但位于派生类和基类中时,基类函数会被屏蔽。)