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:

};


具体的类PayOffCallPayOff派生。在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/

10-10 13:14