C ++:从派生实例调用基于纯虚方法的重载

时间:2014-04-07 10:45:59

标签: c++ inheritance g++ override overloading

我有一个基类,它包含一个抽象方法func(int, float, unsigned)和一个重载此方法func(int),以及一个实现抽象方法的Derived类

class Base
{
public:
    virtual void func(int x, float y, unsigned z) = 0;

    void func(int x)
    {
        cout << "func with x only" << endl;
    }
};

class Derived : public Base
{
public:
    void func(int x, float y, unsigned z)
    {
        cout << "func override" << endl;
    }

};

在我的代码中,我有一个派生类的实例,它调用基类func(int)的重载方法。

int main()
{
    Derived d;
    d.func(10);     // <<--------- 'COMPILATION ERROR'
    return 0;
}

在编译这段代码时,我收到以下编译错误:

error: no matching function for call to 'Derived::func(int&)'
note: candidates are: virtual void Derived::func(int, float, unsigned int)

出现此错误的原因是什么/为什么此代码不起作用?

2 个答案:

答案 0 :(得分:2)

您需要将基类功能带入派生类&#39; 命名空间

通过写

来做到这一点
using Base::func;

你孩子班级宣言中的某个地方。

请注意,重载 func,而不是覆盖

答案 1 :(得分:0)

在c ++ 11中:

int main()
{
    Base && b = Derived();
    b.func(10);    
    return 0;
}