C++ 派生类覆盖重载基类函数

派生类希望基类重载函数可见,情况有三种:

    a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。

    b)派生类中一个也不覆盖,则全部基类版本可见。

    c)派生类需要添加新的重载版本,同时又需要可见基类的重载版本,此时并不是必须全部覆盖重写全部版本。可在派生类中用using声明基类重载的函数。

      说明:对派生类没有重新定义的重载版本的访问实际上是对using声明点的访问。

 

两种注意点:

    a)指向派生类的基类指针或引用,不可调用派生类中的重载函数。

      原因:静态编译名字查找先于类型检查,在基类中找到同名函数,就不喊在派生类中继续找,而基类不存在目标调用形式的函数

    b)若不用using声明基类的重载版函数,派生类对象不可调用基类的重载版本。

      原因:派生类的函数,隐藏了基类的同名函数。

所以如果基类的某个函数f有多个重载版本,如果其派生类想使用所有这些版本的f函数(注意是直接调用f而不是显式调用基类::f)的话,必须覆盖所有这些f,或者一个都不覆盖。

这样就很烦,那么我们可以使用using声明。

 

假如基类为Base,派生类为Derived,其中Base内部定义有多个不同版本的重载函数f,如f(int),f(char),f(string)...

在基类里面,我们加上一句:

using Base::f

这样,我们就可以直接用Derived对象/指针/引用调用Base类的所有f函数了。

如:

Derived x;
x.f(int);
x.f(char);

  

 

原文链接: https://www.cnblogs.com/FdWzy/p/12381358.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 派生类覆盖重载基类函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/332604

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:34
下一篇 2023年3月1日 下午6:35

相关推荐