函数重载
条件:同一个作用域中具有多个同名函数,但每个同名函数的参数列表都不相同。与函数返回类型无关。
函数隐藏
条件:基类与派生类具有同名函数。
情况1、在基类中没有使用virtual关键字对成员函数进行声明,而派生类中的同名成员函数的参数列表(参数类型、顺序、个数)与基类完全一致。
情况2、不管基类中的成员函数是否使用virtual关键字进行声明,派生类中的同名成员函数的参数列表(参数类型、顺序、个数)与基类不同。与重载有所区别。
在发生隐藏时,在派生类中可以显式调用父类的同名函数,如Father::function(),直接写明了调用的是父类的function函数而不是子类的。
多态与函数覆盖
C++的多态特性正是通过虚函数来实现的,所以函数覆盖与多态总是关联的。程序在运行时根据对象的实际类型进行对应的方法调用,基类调用基类的方法,派生类调用派生类的方法。
条件:
1、基类中的成员函数必须使用vietual关键字进行声明,即定义为虚函数。
2、发生覆盖的两个成员函数必须位于基类和派生类中。
3、在派生类中重写基类中使用virtual关键字进行声明的成员函数。
4、发生重载的两个成员函数的函数名和参数列表(参数类型、顺序、个数)必须完全一致。