这是一个非常基本的问题,但我的C ++技能有点生疏......
我有一个基类,它有一个带3个参数的成员函数,例如:
class MyBaseClass
{
public:
int func(int a, char b, int c);
};
和一个派生类,它使用1参数版本重载该函数。例如:
class MyDerivedClass : public MyBaseClass
{
public:
int func(float a);
};
当我尝试从派生类的对象上调用基类中的函数时,如下所示:
MyDerivedClass d;
d.func(1, 'a', 0);
编译器抱怨MyDerivedClass::func() does not take 3 arguments
。这是事实,但是我不能通过派生类的对象访问基类函数吗?
我做错了什么?
答案 0 :(得分:6)
MyDerivedClass::func
隐藏了名称MyBaseClass::func
。您可以使用using
声明解决此问题:
class MyDerivedClass : public MyBaseClass
{
public:
using MyBaseClass::func;
int func(float a);
};
答案 1 :(得分:1)
您可能打算将方法MyBaseClass::func()
声明为 virtual
但是,如果你真的想要实现
当我尝试从一个对象的基类调用该函数时 派生类,像这样
然后,您可以尝试
MyDerivedClass d;
d.MyDerivedClass::func( 3.14f );
这可以编译并运行,但似乎不是很好的设计。
编译器抱怨
MyDerivedClass::func()
不占用3 参数
确实如此,根据您的类定义,MyDerivedClass :: func()只接受一个参数。
答案 2 :(得分:0)
使用Class :: func添加""在MyDerivedClass中。
class MyDerivedClass : public MyBaseClass
{
public:
using MyBaseClass::func;
int func(float a);
};