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;
};
et une autre classe avec un membre qui est un objet de class PayOffBridge
:C de l'appel constructeur - besoin de l'aide comprendre comment certains appels sont effectués
class VanillaOption
{
public:
VanillaOption(const PayOffBridge& ThePayOff_, double Expiry);
double OptionPayOff(double Spot) const;
double GetExpiry() const;
private:
double Expiry;
PayOffBridge ThePayOff;
};
Le PayOff* ThePayOffPtr
dans PayOffBridge
est un pointeur vers le virtuel pur suivant classe abstraite:
class PayOff
{
public:
PayOff(){};
virtual double operator()(double Spot) const=0;
virtual ~PayOff(){}
virtual PayOff* clone() const=0;
private:
};
La classe béton PayOffCall
est dérivé de PayOff
. En main()
je
PayOffCall thePayOff(Strike);//double Strike
VanillaOption theOption(thePayOff, Expiry);//double Expiry
Lorsque je fais un pas par le code à l'aide F11 dans Visual Studio, la ligne VanillaOption theOption(thePayOff, Expiry);
finit par appeler PayOffBridge(const PayOff& innerPayOff);
. Je ne peux pas comprendre d'où cela s'appelle. Comment le constructeur de VanillaOption
finit par appeler cela?
Ma 2ème question est le constructeur de VanillaOption
qui est appelé à partir main()
est
VanillaOption::VanillaOption(const PayOffBridge& ThePayOff_, double Expiry_): ThePayOff(ThePayOff_), Expiry(Expiry_)
{
}
Qu'est-ThePayOff(ThePayOff_)
exactement? C'est-à-dire, quel constructeur de PayOffBridge
est appelé, le cas échéant, et que fait exactement cette syntaxe?
Wow ... Je suppose que c'est alors ... le compilateur descend la liste des constructeurs possibles pour 'PayOffBridge' qui pourrait utiliser l'objet' PayOffCall' ... Celui que j'ai rencontré est le plus proche ... ouvre une autre série de questions ... que se passe-t-il quand il y a égalité pour le «plus proche»? – Tryer
Merci pour la clarification ... cela rend mon précédent commentaire discutable. – Tryer
@Tryer C++ a des règles strictes dont le constructeur surchargé ou la méthode devrait être appelée. S'il y a deux constructeurs ou plus, vous obtenez une erreur de compilation. – Stas