使用基类的重载函数

Mic*_*ael 4 c++ overloading derived-class

我尝试做类似的事情

class base {
public:
    virtual double operator() (double val) = 0;
    virtual double operator() (double prev, double val) {
        return prev + operator()(val);
    }
};

class derived: public base {
    virtual double operator() (double val) {
        return someting_clever;
    }
};
Run Code Online (Sandbox Code Playgroud)

我想重载operator()以使用不同的算法,如std :: accumulate或std :: transform.我对operator()(double,double)的基类定义非常满意.但是我无法从派生类中调用它.我是否必须为从基础派生的每个类重写相同的代码?

Gor*_*pik 6

这里的问题是在派生类中定义一个函数会在基类中隐藏相同的函数; 这就是您无法operator()(double, double)从派生类访问的原因.

但是有一种方法可以做到:你可以using在派生类中使用一个指令:

class derived: public base {
    using base::operator();
    virtual double operator() (double val) {
        return someting_clever;
    }
};
Run Code Online (Sandbox Code Playgroud)