这三者之间的关系也不是特别复杂,就是感觉特别绕,根据个人理解总结一下吧。
函数名相同的类非静态成员函数之间,具有如下关系:
重载(同一个类内,函数名相同,参数不同,返回值无限制):
1,同一个类内
2,函数名相同、参数不同
3,有无virtual关键字都可以
覆盖(具有运行时多态):
1,不同类(一个在父类、一个在子类)
2,函数名相同、参数相同
3,父类中函数必须有virtual关键字声明
隐藏(不具有运行时多态):
1,不同类(一个在父类,一个在子类)
2,当函数名相同、参数不同时,不论有无virtual关键字声明,父类中函数都不会被子类所覆盖掉,具体表现为
不具有运行时多态,即Father* p = new Son; p->func();此时调用的是父类中的func方法。此种情况要与函数
重载区分
3,当函数名相同、参数也相同时,父类中函数没有virtual关键字声明,此时父类中函数都不会被子类所覆盖掉,
具体表现为和上述2一样。此种情况要与函数覆盖区分