重载&覆盖&隐藏

(下述<函数参数相同>是指 参数个数 、 参数类型 和 返回类型 均相同)

一、重载(overload):

特征: 函数名相同 、函数参数不同、 必须位于同一个域(类)中;

二、覆盖(重写)(override):

特征: 函数名相同 、函数参数相同、 分别位于派生类和基类中、virtual(虚函数)

三、隐藏(hide):

特征:

函数名相同、参数不同、分别位于派生类和基类中、无论父类中的同名函数是否含有virtual关键字,(即与重载的区别是两个函数是否在同一个域(类)中);

函数名相同、参数相同,但是基类函数没有 virtual关键字,此时,基类的函数被隐藏(注意别与覆盖混淆);

即:派生类中函数隐藏(屏蔽)了基类中的同名函数。

关于隐藏的理解,在调用一个类的成员函数时,编译器会沿着类的继承链逐级向上查找函数的定义,如果找到了则停止查找;所以如果一个派生类和一个基类都有一个同名函数(不论函数参数是否相同),而编译器最终选择了在派生类中的函数,那么就说这个派生类的成员函数“隐藏”了基类的同名函数,即它阻止了编译器继续向上查找函数的定义。(所以同名函数,虽函数参数不同,但位于派生类和基类中时,基类函数会被屏蔽。)

猜你喜欢

转载自blog.csdn.net/SFDWU3QVG/article/details/126875566