嗨,我正在阅读 Joshi 的 C++ Design Patterns and Derivatives Pricing 的第 4 章,但我不理解代码的某些部分。我们有一个 PayOff 类,我们想定义一个以 PayOff 作为成员的 VanillaOption 类。为了有效地做到这一点,他使用了一个虚拟复制构造函数。
#ifndef PAYOFF_H
#define PAYOFF_H
class PayOff
{
private:
public:
PayOff(){}
virtual double operator() (double Spot) const = 0;
virtual PayOff* clone() = 0;
virtual ~PayOff(){}
};
class PayOffCall : public PayOff
{
private:
double Strike;
public:
PayOffCall(double Strike_);
virtual PayOff* clone(){return new PayOffCall(*this);}
virtual ~PayOffCall(){}
};
#endif
#ifndef VO_H
#define VO_H
#include "PayOff.h"
class VanillaOption
{
private:
PayOff* ThePayOffPtr;
double Expiry;
public:
VanillaOption(PayOff&,double ); //constructor
VanillaOption(VanillaOption& original) {thePayOffPtr = original.thePayOffPtr->clone(); Expiry = original.Expiry;} //copy constructor
VanillaOption& operator=(VanillaOption&);
~VanillaOption();
};
#endif
我不明白 VanillaOption 的复制构造函数如何访问 original 的私有成员,即为什么我可以这样做 thePayOffPtr = original.thePayOffPtr->clone(); 和到期=原始。到期;。有人可以帮忙吗?提前谢谢了。