派生类不从基类继承重载方法

时间:2014-10-27 21:56:52

标签: c++ inheritance polymorphism overloading shadowing

我想在基类中调用一个纯虚方法,该方法将在派生类中实现。但是,基类无参数方法似乎不会被派生类继承。我究竟做错了什么?编译器是MSVC12。

  

错误C2660:'派生::加载' :function不带0个参数

这是一个完整的例子(由于错误而无法编译):

struct Base
{
    void load() { load(42); }; // Making this virtual doesn't matter.
    virtual void load(int i) = 0;
};

struct Derived : Base
{
    virtual void load(int i) {};
};

int main()
{
    Derived d;
    d.load(); // error C2660: 'Derived::load' : function does not take 0 arguments
}

2 个答案:

答案 0 :(得分:11)

哦,派生类 继承void load()

但是你在派生类中声明void load(int i),这意味着它被遮蔽了。

using Base::load;添加到Derived,将load的所有未覆盖定义从Base添加到Derived中的重载集。

或者,使用scope-resolution-operator Base显式调用d.Base::load(); - class-version。

答案 1 :(得分:2)

您必须明确调用Based.Base::load();。我不知道为什么,但它确实有效。我的猜测是覆盖会隐藏所有重载。