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

时间:2010-03-13 07:07:08

标签: 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);

}

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

4 个答案:

答案 0 :(得分:11)

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

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

修改:[{3}}的答案解释了为什么base::foo()在没有derived声明的情况下无法直接使用using

答案 1 :(得分:6)

d.base::foo();

答案 2 :(得分:2)

将以下语句添加到派生类:

using Base::foo ;

这应该有助于达到目的。

如果派生类中的函数与基类中的某个函数具有相同的名称,则基类的所有函数都是隐藏的,您必须明确地将它们放在派生类的范围内。 / p>

答案 3 :(得分:0)

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

#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;
} 

输出将是基类。