- 重载(overlord):在同一个作用域内,函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同。重载是一种
静态多态
,即在编译期间
便可绑定到对应函数。 - 覆盖(override):父类函数为虚函数(virtual),在子类中定义一个与父类完全相同的虚函数(函数名,参数个数,参数类型,返回值类型都相同),那么这个子类的函数就覆盖了父类的虚函数,此时这个子类的函数也是虚函数,如果不加virtual修饰,编译器也会默认为虚函数。如果用一个父类的指针或引用指向子类对象,那么用这个指针或引用调用该虚函数,调用的是子类重写的虚函数;相反,如果用一个父类的指针或引用指向父类对象,那么用这个指针或引用调用该虚函数,调用的是父类的虚函数。覆盖是通过
虚函数表
机制来实现的,是一种动态多态
,即在运行期间
才能进行函数绑定。 - 隐藏:在父类和子类中,成员函数(或成员变量)名称相同,则访问该成员时只能访问子类的成员,父类同名成员被隐藏。如果要访问父类同名成员,必须在前面加上父类作用域。
为什么返回值类型不同不是重载?
因为函数的调用是根据函数名和参数类型列表来区分的,与返回值类型无关。