使用基类的重载函数

using overloaded function of the base class

本文关键字:重载 函数 基类      更新时间:2023-10-16

我试着这样做

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;
    }
};

我想重载操作符(),以便在std::accumulate或std::transform等不同的算法中使用它。我对operator()(double, double)的基类定义非常满意。然而,我不能从派生类调用它。我是否必须为从base派生的每个类重写相同的代码?

这里的问题是,在派生类中定义函数隐藏了基类中相同的函数;这就是为什么不能从派生类访问operator()(double, double)的原因。

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

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

你试过using指令吗?

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