使用派生类的对象访问基类的方法,该对象具有相同名称的方法

Ash*_*dav 9 c++ inheritance

当使用派生类的对象访问"base"的foo()时.

#include <iostream>

class  base
{
      public:
      void foo()
     {
        std::cout<<"\nHello from foo\n";
     }
};

class derived : public base
{
     public:
     void foo(int k)
     {
        std::cout<<"\nHello from foo with value = "<<k<<"\n";
     }
};
int main()
{
      derived d;
      d.foo();//error:no matching for derived::foo()
      d.foo(10);

}
Run Code Online (Sandbox Code Playgroud)

如何在派生类中访问具有相同名称的方法的基类方法.生成的错误已显示.如果我不清楚,我道歉,但我觉得我已经把自己弄清楚了.提前致谢.

Jos*_*zen 12

您可以添加using base::foo到派生类:

class derived : public base
{
public:
     using base::foo;
     void foo(int k)
     {
        std::cout<<"\nHello from foo with value = "<<k<<"\n";
     }
};
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题的答案解释了为什么没有声明base::foo()就无法直接使用.derivedusing

  • @ashish:它是可访问的(这意味着public/protected/private的访问说明符),但它是*hidden*.阅读Josh链接的问题:http://stackoverflow.com/questions/1628768/why-does-an-overridden-function-in-the-derived-class-hide-other-overloads-of-the (2认同)