派生类中的重载函数(C ++)


Overloaded function in derived class (C++)

这是一个非常基本的问题,但是我的C++技能有点生疏…

我有一个基类,它有一个接受3个参数的成员函数,例如:

1
2
3
4
5
class MyBaseClass
{
public:
    int func(int a, char b, int c);
};

以及一个派生类,它用单参数版本重载该函数,例如:

1
2
3
4
5
class MyDerivedClass : public MyBaseClass
{
public:
    int func(float a);
};

当我试图从派生类的对象的基类调用函数时,如下所示:

1
2
MyDerivedClass d;
d.func(1, 'a', 0);

编译器抱怨MyDerivedClass::func() does not take 3 arguments。这是真的,但我不应该通过派生类的对象访问基类函数吗?

我做错什么了?


MyDerivedClass::func隐藏了MyBaseClass::func的名字。您可以使用using声明来修复此问题:

1
2
3
4
5
6
class MyDerivedClass : public MyBaseClass
{
public:
    using MyBaseClass::func;
    int func(float a);
};


您可能打算将方法MyBaseClass::func()声明为virtual

但是,如果你真的想实现

when I try to call the function from the base class on an object of
the derived class, like this

那么,你可以试试

1
2
MyDerivedClass d;
d.MyDerivedClass::func( 3.14f );

这是编译和工作,但似乎不是很好的设计。

the compiler complains that MyDerivedClass::func() does not take 3
arguments

实际上,根据类定义,myDerivedClass::func()只接受一个参数。


在myDerivedClass中添加"using class::func;"。

1
2
3
4
5
6
class MyDerivedClass : public MyBaseClass
    {
    public:
        using MyBaseClass::func;
        int func(float a);
    };