共同点:函数名相同
定义:
1)如果在类里函数名相同但是形参不同,则为重载。形参不同包括形参的类型个数以及顺序。
2)类间。重写和隐藏都发生在基类和派生类之间。
重写(覆盖):发生在派生类和基类之间。必须满足两个条件:(1)基类有virtual声明(2)函数名和形参必须完全相同。
隐藏:发生在派生类和基类之间,必须满足以下两个条件:(1)派生类中函数名与基类相同(2)基类中没有virtual声明或形参不同。
即子类重新定义基类的非虚函数。
重载和覆盖的区别:
1,方法的覆盖是基类和子类的关系,是垂直关系。
方法的重写是同一个类中不同方法之间的关系,是水平关系。
2,在覆盖中要求函数原型完全相同,在重写中只要求函数名相同且形参不同。
3,重载是根据实参表和形参表来匹配函数的,是在编译的时候进行的是早绑定。覆盖是根据对象对应存储空间的类型来选择函数体的,是在运行的时候动态绑定的,是晚绑定。
4,隐藏及子类重新定义基类的虚函数。
5,如果基类的函数要在子类中重新定义,就要在基类中申明virtual.另一方面,如果一个函数不会再子类中重新定义,就不要virtual,因为在运行时动态绑定虚函数要占用系统资源和时间。
6,在VS2010中,当定义两个完全相同的函数时,不会报错,而当调用这个函数时就会报错,即使没有执行。重载的函数匹配不是在编译的时候进行的。而是在预处理阶段进行的,与教科书上的结论矛盾。作何解释?欢迎讨论!!