使用派生类的对象访问“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);
}
如何在派生类中访问具有相同名称的方法的基类方法。 生成的错误已显示。 如果我不清楚,我道歉,但我觉得我已经把自己弄清楚了。 提前谢谢。
答案 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;
}
输出将是基类。