class PayOffBridge
{
public:
PayOffBridge();
PayOffBridge(const PayOffBridge& original);
PayOffBridge(const PayOff& innerPayOff);
inline double operator()(double Spot) const;
~PayOffBridge();
PayOffBridge& operator=(const PayOffBridge& original);
private:
PayOff* ThePayOffPtr;
};
и другой класс с членом, который является объектом class PayOffBridge
:
class VanillaOption
{
public:
VanillaOption(const PayOffBridge& ThePayOff_, double Expiry);
double OptionPayOff(double Spot) const;
double GetExpiry() const;
private:
double Expiry;
PayOffBridge ThePayOff;
};
PayOff* ThePayOffPtr
в PayOffBridge
является указателем на следующий чистый виртуальный абстрактный класс:
class PayOff
{
public:
PayOff(){};
virtual double operator()(double Spot) const=0;
virtual ~PayOff(){}
virtual PayOff* clone() const=0;
private:
};
Класс бетона PayOffCall
является производным от PayOff
. В main()
у меня
PayOffCall thePayOff(Strike);//double Strike
VanillaOption theOption(thePayOff, Expiry);//double Expiry
Когда я выполняю код с помощью F11 в Visual Studio, строка VanillaOption theOption(thePayOff, Expiry);
в итоге вызывает PayOffBridge(const PayOff& innerPayOff);
. Я не могу понять, откуда это называется. Как конструктор для VanillaOption
в итоге вызывает это?
Мой второй вопрос - конструктор для VanillaOption
, который вызывается из main()
:
VanillaOption::VanillaOption(const PayOffBridge& ThePayOff_, double Expiry_): ThePayOff(ThePayOff_), Expiry(Expiry_)
{
}
Что именно делает ThePayOff(ThePayOff_)
? То есть, какой конструктор PayOffBridge
вызывается, если вообще, и что именно выполняет этот синтаксис?