函数重载问题C++
Function overloading problems C++
我是 运行 一个期权定价模型,可以为四种不同的期权产生四种价值。
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 的源 material:
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)
{
}
我遇到的错误是 "constructor cannot be redeclared"。但是我的函数有不同的参数(Batch1/Batch2)所以我不明白为什么它没有重载。 Batch2 的输出也与 Batch 1 相同(这是不正确的)。如果您能提供指导,我将不胜感激。
重载基于参数类型而不是参数名称。
EuroOption::EuroOption(vector<double> Batch1)
这里vector<double>
是参数类型,Batch1
是参数名称
如果要重载函数,则应声明具有不同参数类型或不同数量参数的函数。
例如,这些是重载函数,
EuroOption::EuroOption(vector<double> Batch1)
EuroOption::EuroOption(vector<int> Batch1)
EuroOption::EuroOption(string Batch1)
这些构造函数是相同的:
EuroOption(vector<double> Batch1);
EuroOption(vector<double> Batch2);
这些声明等同于:
EuroOption(vector<double>);
EuroOption(vector<double>);
因为函数签名相同。这由参数的 return 类型、名称和数量以及类型决定。
虽然参数名称不同,但函数的签名完全相同。在您的示例中,当您调用构造函数时,您如何决定调用哪个构造函数?唯一的区别是参数名称,但调用者无法访问它。
方法重载意味着相同的方法不同的签名
EuroOption(向量 Batch1);
EuroOption(向量 Batch2);
同一个方法在同一个 class 中声明了两次导致错误方法重新声明
我猜你想要做的是标记分派构造函数或类似的东西,以便使用不同的硬编码默认值构造 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{}};
我是 运行 一个期权定价模型,可以为四种不同的期权产生四种价值。
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 的源 material:
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)
{
}
我遇到的错误是 "constructor cannot be redeclared"。但是我的函数有不同的参数(Batch1/Batch2)所以我不明白为什么它没有重载。 Batch2 的输出也与 Batch 1 相同(这是不正确的)。如果您能提供指导,我将不胜感激。
重载基于参数类型而不是参数名称。
EuroOption::EuroOption(vector<double> Batch1)
这里vector<double>
是参数类型,Batch1
是参数名称
如果要重载函数,则应声明具有不同参数类型或不同数量参数的函数。
例如,这些是重载函数,
EuroOption::EuroOption(vector<double> Batch1)
EuroOption::EuroOption(vector<int> Batch1)
EuroOption::EuroOption(string Batch1)
这些构造函数是相同的:
EuroOption(vector<double> Batch1);
EuroOption(vector<double> Batch2);
这些声明等同于:
EuroOption(vector<double>);
EuroOption(vector<double>);
因为函数签名相同。这由参数的 return 类型、名称和数量以及类型决定。
虽然参数名称不同,但函数的签名完全相同。在您的示例中,当您调用构造函数时,您如何决定调用哪个构造函数?唯一的区别是参数名称,但调用者无法访问它。
方法重载意味着相同的方法不同的签名 EuroOption(向量 Batch1); EuroOption(向量 Batch2); 同一个方法在同一个 class 中声明了两次导致错误方法重新声明
我猜你想要做的是标记分派构造函数或类似的东西,以便使用不同的硬编码默认值构造 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{}};