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
当我在Visual Studio中使用F11逐步执行代码时,行
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
的哪个构造函数(如果有的话)被调用,并且此语法究竟能完成什么工作? 最佳答案
第一个答案VanillaOption
期望PayOffBridge
对象作为构造函数参数。但是,您改为传递PayOffCall
对象。编译器正在寻找一种从给定的PayOffBridge
对象构造临时PayOffCall
对象的方法。
它具有PayOffBridge(const PayOff& innerPayOff);
构造函数。因此,它需要对PayOff
对象的引用进行构造。但是,PayOffCall
是从PayOff
派生的,因此const PayOffCall&
被隐式转换为const PayOff&
,您将构造PayOffBridge
。
第二个答案ThePayOff(ThePayOff_)
表示对象构造。首先,您应该识别这些变量的类型。const PayOffBridge& ThePayOff_
-输入参数PayOffBridge ThePayOff
-VanilaOption
的成员
因此,PayOffBridge
对象是从另一个PayOffBridge
对象构造的。显然,复制构造函数被称为PayOffBridge(const PayOffBridge& original);
关于c++ - C++构造函数调用-需要帮助确定如何进行某些调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4356004/