基类和派生类之间的同名函数处理方式

Posted tekkaman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基类和派生类之间的同名函数处理方式相关的知识,希望对你有一定的参考价值。

基类和派生类之间的同名函数处理方式

class A  
{  
public:  
    void fn()  
    {}  
  
    void fn(int a)  
    {}  
};  
  
class B : public A  
{  
public:  
    void fn()   
    {}  
};  
  
int main()  
{  
    B b;  
    b.fn(3);  // 编译失败,编译器会报怨,B中,并不存在fn(int)的函数)。
    return 0;  
}  

  这里涉及到一个C++中的重要的知识点。即:同名函数的重载动作,只发生在自由函数(即非成员),及同一个class/struct内部的函数之间。而不能跨越基类和派生类。当派生类写一个和基类同名(无论参数列表相同或不相同)的函数时,此时发生的动作叫“覆盖”。覆盖的意思,就是基类的同名函数,在派生类内,将变得无法直接调用(但可以间接调用)。

参考:

1、https://blog.csdn.net/jinvmen/article/details/48311445

以上是关于基类和派生类之间的同名函数处理方式的主要内容,如果未能解决你的问题,请参考以下文章

不是抽象类的基类不是好基类

c++中的虚函数有啥作用?

多态虚函数表底层实现多重继承的问题及处理

关于基类和派生类之间的关系

C++重载隐藏和覆盖的区别

派生类和基类的转换