overload重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。
override重写(覆写):是指派生类中存在重新定义的函数,以实现不同的功能,一般是用于子类在继承父类时,重写父类方法。其函数名、参数列表、返回值类型、所抛出的异常,所有都必须同基类中被重写的函数一致。被重写的方法不能为private。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。
- 范围区别:重载是在同一个作用域内,定义多个同名函数,通过参数的不同来区分;而重写是在不同的类之间,子类重新定义父类的虚函数。
- 参数区别:重载可以改变函数的参数类型、个数或顺序,但不能改变函数的返回值类型和函数名;而重写必须具有与被重写函数相同的函数名、参数列表和返回值类型。
- virtual:重写的基类函数必须有virtual修饰;重载函数和被重载函数可以被virtual修饰,也可以没有。
- 重载是静态绑定,即在编译期间就确定了调用的函数;而重写是动态绑定,即在运行期间根据实际对象的类型来确定调用的函数。
使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。
重写和重载的本质区别是:加入了override的修饰符方法,此方法始终只有一个被使用的方法。