使用基类的重载函数

时间:2011-11-23 16:03:51

标签: 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;
    }
};

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

2 个答案:

答案 0 :(得分:6)

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

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

class derived: public base {
    using base::operator();
    virtual double operator() (double val) {
        return someting_clever;
    }
};

答案 1 :(得分:3)

您是否尝试过使用指令?

class derived: public base {
    virtual double operator() (double val) {
        return someting_clever;
    }
    using base::operator();
};