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

Overloaded function in derived class (C++)

本文关键字:重载 函数 C++ 派生      更新时间:2023-10-16

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

我做错了什么?

>MyDerivedClass::func隐藏了名称MyBaseClass::func。您可以使用using声明来解决此问题:

class MyDerivedClass : public MyBaseClass
{
public:
    using MyBaseClass::func;
    int func(float a);
};

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

但是,如果你真的想实现

当我尝试从基类调用函数时 派生类,如下所示

然后,您可以尝试

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

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

编译器抱怨MyDerivedClass::func()不需要 3 参数

确实如此,根据你的类定义,MyDerivedClass::func() 只接受一个参数。

在 MyDerivedClass 中添加 "using Class::func;"。

class MyDerivedClass : public MyBaseClass
    {
    public:
        using MyBaseClass::func;
        int func(float a);
    };