struct Price { enum Type { Dirty, clean }; }; struct Dividend { enum Type { Cash, Yield }; }; Class ConvertibleBond: public Bond { public: ConvertibleBond( Real conversionRatio, Volatility volatility, Real underlyingPrice, Spread creditSpreadRates, Price::Type callType, Dividend::Type dividendType, const vector& dividendInfo, const vector& callSchedule, const vector& putSchedule, const Handle& riskFreeRate, const Date& issueDate, const Date& datedDate, const Date& bondMaturityDate, Integer settlementDays, Rate coupon, Frequency couponFrequency, const DayCounter& dayCounter, const Calendar& calendar, BusinessDayConvention convention, Real redemption = 100 ); // constructor virtual ~ConvertibleBond(); virtual Real conversionRatio() const; virtual Volatility volatility() const; virtual Real conversionPrice() const; virtual Real cvBondMaturity() const; virtual Spread creditSpreadRates() const; virtual Handle& riskFreeRate const; virtual vector& dividendInfo() const; virtual vector& callSchedule() const; virtual vector& putSchedule() const; private: Real conversionRatio_,underlyingPrice_,cvBondMaturity_; Spread creditSpreadRates_; Volatility volatility_; vector dividendInfo_, callSchedule_,putSchedule_; Price::Type priceType_; Dividend::Type dividendType_; const Handle& riskFreeRate_; };