こんにちは、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 のコピー コンストラクターがオリジナルのプライベート メンバーにアクセスする方法を理解していません。つまり、なぜ thePayOffPtr = original.thePayOffPtr->clone(); 有効期限 = original.Expiry;。誰でもこれを手伝ってもらえますか?よろしくお願いします。