【问题标题】:Accessing base class's method with derived class's object which has a method of same name使用具有同名方法的派生类对象访问基类的方法
【发布时间】:2010-03-13 07:07:07
【问题描述】:

当使用派生类的对象访问“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);

}

如何访问派生类中具有同名方法的基类方法。 已显示生成的错误。 如果我不清楚,我很抱歉,但我觉得我已经让自己像水一样清澈。 提前致谢。

【问题讨论】:

标签: c++ inheritance


【解决方案1】:

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

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

编辑:this question 的答案解释了为什么您的 base::foo() 在没有 using 声明的情况下不能从 derived 直接使用。

【讨论】:

  • 但是为什么基类的 foo() 不能在派生类中访问,而我继承了该基类...
  • @ashish:它是可访问的(表示公共/受保护/私有的访问说明符),但它是隐藏的。阅读 Josh 链接的问题:stackoverflow.com/questions/1628768/…
  • 哦,哇,我正要创建包装器来委托给隐藏的基本重载,只是为了将它们从派生对象中公开,有点像void foo() { base::foo() },然后想一定有更好的方法来做到这一点,谢天谢地,是的。也可以选择d.base::foo(),但从客户端的角度来看,这似乎有点烦人。
【解决方案2】:
d.base::foo();

【讨论】:

    【解决方案3】:

    在派生类中添加以下语句:

    using Base::foo ;
    

    这应该可以达到目的。

    当您在派生类中有一个与基类中的函数同名的函数时,基类的所有函数都是隐藏的,您必须明确地将它们带入派生类的范围内。

    【讨论】:

      【解决方案4】:

      我们可以使用派生类对象调用基类方法。按照下面的代码。

      #include<iostream.h>
      class base
      {
      public:
      void fun()
      {
          cout<<"base class\n";
      }
      };
      class der : public base
      {
      public:
      void fun()
      {
      cout<<"derived class\n";
      }
      };
      int main()
      {
      
      der d1;
      
      
      d1.base::fun();
      
      
      return 0;
      } 
      

      输出将是基类。

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 2013-03-28
        相关资源
        最近更新 更多