c++ 在派生类中调用operator()() 不起作用

问题描述 投票:0回答:1

我有一个抽象基类,具有operator()()、operator和virtualoperator()(...)方法。在派生类中,我重写虚拟方法,但无法调用 operarator()() 方法。我也不知道为什么?

#include <iostream>
#include <vector>

using Date = size_t;
using Period = size_t;

// abstract series
template <class T>
class SeriesBase {
public:
    T operator()() const {
        return operator()(0);
    }

    T operator[](const Period period) const {
        return operator()(period);
    }

    virtual T operator()(const Period period) const = 0;
};

template <class T>
class Series : public SeriesBase<T> {
public:
};

// concrete series
class DateSeries : public Series<Date> {
public:
    Date operator()(const Period period) const override {
        return 20231212;    // or return something from vector
    }

private:
    std::vector<Date>   values;
};

int main() {
    DateSeries          dateSeries;
    dateSeries();       // not working ???
    dateSeries[1];      // working
    dateSeries(1);      // working
}
c++ inheritance overriding virtual operator-keyword
1个回答
0
投票

即使它有不同的参数,它也会被派生类遮盖。

你需要这样做:

operator()

https://godbolt.org/z/rYPa53sd9

© www.soinside.com 2019 - 2024. All rights reserved.