C++,无法实例化抽象类错误



由于以下成员,编译器给出的错误无法实例化抽象类:

我该如何排序?

'double PayOff::operator ()(const double &) const' : is abstract

这是抽象类

class PayOff {
public:
    virtual ~PayOff() {}
    virtual double operator()(const double& spot) const = 0;
    virtual std::shared_ptr<PayOff> clone() const = 0;
};

派生类是

class AsianGeometric: public PayOff{
private:
        double strike;
public:
    AsianGeometric(const double& strike);
    virtual ~AsianGeometric(){};
    virtual double asianpay()(const std::vector<double>& spot_prices) const;
    virtual std::shared_ptr<PayOff> clone()const;
};
AsianGeometric::AsianGeometric(const double& strike){
    this-> strike = strike;
}
double AsianGeometric::asianpay(const std::vector<double>& spot_prices) const{
    unsigned num_times = spot_prices.size();
    double log_sum = 0.0;
    for (unsigned int i=0; i<spot_prices.size(); i++){
        log_sum += log(spot_prices[i]);
    }
    double geom_mean = exp(log_sum/static_cast<double>(num_times));
    if (geom_mean > strike) return geom_mean - strike;
        else return 0;
 }
std::shared_ptr<PayOff> AsianGeometric::clone()const{
    return std::shared_ptr<PayOff>(new AsianGeometric(*this));
 }

您知道:

virtual double operator()(const std::vector<double>& spot_prices) const;

不覆盖:

virtual double operator()(const double& spot) const = 0;

右?

为了实例化派生类AsianGeometric,它需要对基类中的所有纯虚函数进行一些实现。

virtual double operator()(const double& spot) const = 0;
virtual std::shared_ptr<PayOff> clone() const = 0;

也就是说,类似于以下内容。

class AsianGeometric: public PayOff{
private:
    double strike;
public:
    AsianGeometric(const double& strike);
    virtual ~AsianGeometric(){};
    virtual double operator()(const double& spot) const {
      // put implementation here
    }
    virtual std::shared_ptr<PayOff> clone() const {
      // put implementation here
    }

注意实现可以内联放在类体中也可以离线,没关系,重要的一点是方法签名必须完全匹配。

此外,在 C++11 中,作为一个优秀的设计器,您可以使用 override 关键字来指示您的意图是重写的编译器。这样,如果派生方法的签名与基类的签名有任何差异,则编译器会将其标记为错误。

那是

virtual double operator()(const double& spot) const ovrerride;
                                                    ^^^^^^^^^

最新更新