重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。对于这两个函数的调用,在编译期间就已确定,是静态的。也就是说它们的地址在编译器就绑定了(早绑定),因此重载与多态无关。
覆盖(重写):子类重新定义父类虚函数的方法。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的。因此,这样的函数地址是在运行期间绑定的(晚绑定),重写与多态相关。
重载的特征 覆盖的特征
1.相同的范围(同一个类中) 1.不同的类中(父类和子类)
2.函数名相同 2.函数名不同
3.参数不同 3.参数相同
4.virtual关键字可有可无 4.基类中必须有virtual关键字
隐藏的两种情况:
1.若派生类中的函数与基类的函数同名,但参数不同,此时无论有无virtual关键字,基类的函数被隐藏。
2.若派生类中的函数与基类的函数同名,且参数相同,若基类函数没有virtual关键字,基类的函数被隐藏。
时间: 2024-10-09 02:03:36