首页 > 编程语言 > 详细

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

时间:2020-02-29 09:57:01      阅读:83      评论:0      收藏:0      [点我收藏+]

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

    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);

  

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!