如何从派生类实例调用父类重载函数?

时间:2019-06-12 13:28:39

标签: c++ generics

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

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

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)。

1 个答案:

答案 0 :(得分:4)

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

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