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

时间:2014-04-01 19:43:37

标签: c++

这是一个非常基本的问题,但我的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。这是事实,但是我不能通过派生类的对象访问基类函数吗?

我做错了什么?

3 个答案:

答案 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);
    };