我正在运行期权定价模型,为四种不同的选项产生四个值。
class EuroOption
{
private:
double S; //underlying stock price
double X; //strike price
double sigma; //volatility
double T; //time to expiration
double r; //risk-free rate
double b; //cost of carry
public:
EuroOption(); //default constructor
~EuroOption(); //destructor
EuroOption(const EuroOption& eo); //copy constructor
EuroOption& operator = (const EuroOption& source); //assignment operator
EuroOption(vector<double> Batch1);
EuroOption(vector<double> Batch2); //this is the error: redeclaration
//EuroOption(vector<double> const Batch3);
//EuroOption(vector<double> const Batch4);
以下是.cpp的源材料:
EuroOption::EuroOption(vector<double> Batch1) : S(60), X(65), sigma(0.30), r(0.08), T(0.25), b(r)
{
}
EuroOption::EuroOption(vector<double> Batch2) : S(100), X(100), sigma(0.20), r(0), T(1), b(r)
{
}
我得到的错误是“构造函数无法重新声明”。但我的函数有不同的参数(Batch1 / Batch2),所以我不明白它为什么不重载。 Batch2的输出也与Batch 1相同(这不正确)。我很感激你的指导。
答案 0 :(得分:4)
重载基于参数类型而非参数名称。
EuroOption::EuroOption(vector<double> Batch1)
此处vector<double>
是参数类型,Batch1
是参数名称
如果要重载函数,则应声明具有不同参数类型或不同数量参数的函数。
例如,这些是重载函数,
EuroOption::EuroOption(vector<double> Batch1)
EuroOption::EuroOption(vector<int> Batch1)
EuroOption::EuroOption(string Batch1)
答案 1 :(得分:3)
我猜你想做的事情的意图是标记调度构造函数或类似的东西,以便使用不同的硬编码默认值构造EuroOption。
struct Batch1{};
struct Batch2{};
class EuroOption
{
private:
double S; //underlying stock price
double X; //strike price
double sigma; //volatility
double T; //time to expiration
double r; //risk-free rate
double b; //cost of carry
public:
EuroOption(); //default constructor
~EuroOption(); //destructor
EuroOption(const EuroOption& eo); //copy constructor
EuroOption& operator = (const EuroOption& source); //assignment operator
EuroOption(Batch1);
EuroOption(Batch2);
.cpp文件:
EuroOption::EuroOption(Batch1) : S(60), X(65), sigma(0.30), r(0.08), T(0.25), b(r)
{
}
EuroOption::EuroOption(Batch2) : S(100), X(100), sigma(0.20), r(0), T(1), b(r)
{
}
然后在代码的其他地方,它可以构造为:
EuroOption option1{Batch1{}};
EuroOption option2{Batch2{}};
答案 2 :(得分:1)
这些构造函数是相同的:
EuroOption(vector<double> Batch1);
EuroOption(vector<double> Batch2);
这些声明等同于:
EuroOption(vector<double>);
EuroOption(vector<double>);
答案 3 :(得分:0)
这是因为功能签名是相同的。这取决于返回类型,名称和数量以及参数的类型。
虽然参数名称不同,但功能具有完全相同的签名。在您的示例中,当您调用构造函数时,如何确定调用哪个构造函数?唯一的区别是参数名称,但调用者无法访问。
答案 4 :(得分:0)
方法重载意味着同一方法不同的签名 EuroOption(向量Batch1); EuroOption(向量Batch2); 同一个方法在同一个类中声明了两次导致错误方法重新声明