基类虚函数与子类虚函数同名会有什么结果
时间: 2023-08-28 09:00:40 浏览: 100
虚函数与重载函数的关系
当基类和子类中存在同名的虚函数时,子类的同名函数会覆盖基类的同名函数。这意味着在通过基类指针或引用调用该虚函数时,实际上会调用子类中的虚函数而不是基类中的虚函数。
具体的结果取于如何使用这个虚函数。以下是两种可能的情况:
1. 通过基类指针或引用调用虚函数:如果你使用基类指针或引用来调用这个同名虚函数,那么实际上会调用子类中的虚函数。这是因为基类指针或引用在运行时会根据对象的实际类型来确定要调用的虚函数。这种情况下,子类中的同名虚函数会覆盖基类中的虚函数。
2. 直接在子类中调用虚函数:如果你在子类中直接调用这个同名虚函数,那么实际上会调用子类自身的虚函数,而不会涉及到基类中的虚函数。这是因为在子类中直接调用虚函数时,编译器会根据静态类型确定要调用的具体函数,而不会像通过基类指针或引用那样根据动态类型来确定。
需要注意的是,如果你希望在子类中重写基类的虚函数时保持其虚函数特性,即在子类中使用`virtual`关键字,这样子类中的同名虚函数就可以被基类指针或引用调用到。如果在子类中没有使用`virtual`关键字,则子类中的同名函数不会被认为是虚函数,无法通过基类指针或引用进行多态调用。
综上所述,当基类和子类中存在同名的虚函数时,子类的同名虚函数会覆盖基类的同名虚函数,并且调用方式取决于使用基类指针或引用还是直接在子类中调用。
阅读全文