网上看到的关于C++函数的重载、覆盖和隐藏区别的回答,如下(其内容来源于C++面试宝典中一道题目):
a.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
b.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
一个派生类的函数如果覆盖了某个继承而来的虚函数,则它的形参类型及返回类型必须与被它覆盖的基类函数完全一致,除非当类的虚函数返回类型是类本身的指针或引用时。
当派生类中某函数与基类的某虚函数名字及形参相同时,此时编译器认为派生类覆盖了这个函数,此时返回类型需一致,除非是上述情况,不然出错。若形参类型不同,这是两个不同的函数(隐藏)。
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(若有virtual关键字,则是覆盖)(注意别与覆盖混淆).
看了后,觉得还是写的有点复杂。自己总结了一下
(1)成员函数被重载,是在一个类当中,具体的概念上面已经有所陈述。
(2)覆盖指派生类函数覆盖基类函数,从其特征可以看出,它是为了实现多态的效果。描述了要实现多态的必要条件
(3)“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,其特征实际上是要实现多态的效果所需要的充要条件。