Эти две функции имеют разные сигнатуры функций .
std::vector<double> generateRiskNeutralPricePath(double toDate, int nSteps);
std::vector<double> generateRiskNeutralPricePath(double toDate, int nSteps, double drift);
C ++ будет обрабатывать их так, как если бы они были двумя разными функциями.Они оба могут быть публичными или оба приватными, и компилятор все равно примет это.Вы могли бы относиться к этому как
std::vector<double> generateRiskNeutralPricePath(double toDate, int nSteps);
std::vector<double> generateRiskNeutralPricePathWithDrift(double toDate, int nSteps, double drift);
Это хорошая практика?Если все сделано правильно, да.Перегруженные функции обычно имеют почти идентичные функции.В этом случае дополнительная drift
, вероятно, просто слегка корректирует возвращаемое значение, в то время как общая функциональность такая же.
Типичным примером является функция квадратного корня.
double sqrt (double x);
float sqrt (float x);
long double sqrt (long double x);
double sqrt (T x); // additional overloads for integral types
Тамэто конкретные правила перегрузки для того, что разрешено и не разрешено, именно для того, чтобы компиляторы не путались.В этом случае эти функции имеют разное количество аргументов, поэтому сигнатуры их функций различны.
(Для тех, кто переходит от C, обратите внимание, что это одно из решающих различий между C и C ++, так как C не 'перегружены функциями.)
Бонус: например, когда компилятор запутывается
Как указать указатель на перегруженную функцию?