成员函数的重载、重写和覆盖很容易混淆,有必要搞清楚概念和它们之间的区别!
1 成员函数被重载的特征
(1) 相同的范围
(2) 函数名字相同
(3) 参数不同
(4) 与virtual关键字无关
//函数名相同、参数相同,但是返回值不同会被编译器视为redifinition
覆盖是指派生类函数覆盖基类函数,特征如下:
(1) 不同的范围(分别位于子类和基类)
(2) 函数名相同
(3) 参数完全相同
(4) 基类函数必须有virtual关键字
//子类的函数函数名和参数与基本完全相同,但是返回值不同会被编译器视为非法的
隐藏:派生类的函数屏蔽其同名的基类函数
(1) 派生类的函数同基类函数同名,但是参数不同,父类函数将被隐藏
(2) 派生类的函数同基类函数名字相同,参数相同,但是父类函数没有virtual,父类函数将被隐藏