微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 重载函数隐藏在派生类中

在派生类中如果我从Base类重新定义/重载一个函数名,
那么那些重载函数是不可访问的/可见的派生类.
为什么是这样??

如果我们不从派生类中的基类重载oveloaded函数
那么该函数的所有重载版本都可用于派生类
对象,为什么是这样?
这是什么原因.如果您在编译器和链接器级别中解释这一点
这将对我更有帮助.是不是可以支持这种情况?

Edited  
For examble:

class B  
{  

  public: 
     int f() {}
     int f(string s) {}
};

class D : public B
{
   public:
    int f(int) {}
};

int main()
{
   D d;
   d.f(1);
   //d.f(string);  //hidden for D
} 

Now object 'd' can't access f() and f(string).

解决方法

TTBOMK这没有真正的技术原因,只是Stroustrup在创建语言时,认为这是更好的认值. (在这里,它类似于rvalue不会隐式绑定到非const引用的规则.)

您可以轻松地解决它明确地将基类版本引入派生类的范围:

class base {
public:
  void f(int);
  void g(int);
};

class derived : public base {
public:
  using base::f;
  void f(float);
  void g(float); // hides base::g
};

或通过明确调用

derived d;
d.base::g(42); // explicitly call base class version

原文地址:https://www.jb51.cc/c/114184.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐