【问题标题】:How can I call parent class overloaded function from derived class instance?如何从派生类实例调用父类重载函数?
【发布时间】:2019-06-12 13:28:39
【问题描述】:

我有一个基类,其中包含一个已实现的函数和一个共享名称但不共享参数的纯虚函数。我无法从派生类的实例调用基类中实现的函数。

我尝试将函数添加到派生类而不是基类并且它可以工作,但这意味着我必须将函数添加到每个派生类,而不是在基类中实现一次。 我也尝试过更改函数名称并且它有效。这似乎是由于两个重载函数之间的冲突。

template <typename T>
class Base {
public:
    virtual T some_function(int x) = 0;
    T some_function() {
    // some code
    }
}

class Derived final: public Base<int> {
    int some_function() {
    // some code
    }
}

int main() {
    Derived var = Derived();
    var.some_function(3);// Compilation error
} 

上面的代码没有编译,说明没有找到函数:some_function(int)。

【问题讨论】:

  • 与此示例无关,但请注意 Derived var 不会表现出多态性(它不会进行虚拟方法调用,而是在编译时根据静态类型解析它们) - 你需要一个指针或参考。

标签: c++ generics


【解决方案1】:

Derived 中的名称 some_function 隐藏了继承自 Base 的名称 some_function。您必须使用 using 声明将其重新纳入范围:

class Derived final: public Base<int> {
public:
    using Base<int>::some_function;
    int some_function() {
    // some code
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2020-02-25
    • 2015-12-30
    • 2012-04-16
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多