下面我们从成员函数的角度来讲述重载和覆盖的区别。
成员函数被重载的特征
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual关键字可有可无。
覆盖的特征
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同
4) 基类函数必须有virtual关键字。
由于C++的多态性总是和虚函数来实现的,所以函数的覆盖总是和多态联系在一起的。
隐藏的特征
1)派生类的函数和基类的函数完全相同(函数名和参数列表相同),只是基类的函数没有使用virtual关键字。此时基类的函数将被隐藏,而不是覆盖。
2)派生类的函数和基类的函数名相同但参数列表不同的情况无论基类的函数是否有virtual关键字,基类的函数都将被隐藏。