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

Posted

技术标签:

【中文标题】派生类不从基类继承重载方法【英文标题】:Derived class not inheriting overloaded method from base class 【发布时间】:2014-12-23 05:17:52 【问题描述】:

我希望基类中的方法调用将在派生类中实现的纯虚拟方法。但是,派生类似乎没有继承基类的无参数方法。我究竟做错了什么?编译器是 MSVC12。

错误 C2660: 'Derived::load' : 函数不接受 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

【问题讨论】:

@Deduplicator 希望我可以为编辑 +1。 不客气,因为这只是最后的润色。 VS2008 C++ can't seem to inherit const overloaded method的可能重复 【参考方案1】:

哦,派生类确实继承void load()

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

using Base::load; 添加到Derived 以将Baseload 的所有非覆盖定义添加到Derived 中的重载集。

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于派生类不从基类继承重载方法的主要内容,如果未能解决你的问题,请参考以下文章

C++派生类是不是可以从基类继承静态数据成员和静态成员函数?

3.继承与派生

15. 继承重载覆盖隐藏

派生类继承基类赋值运算符?

使用纯多态性和继承从基类调用派生类上的函数而不进行强制转换?

类的继承与派生