![](/img/trans.png)
[英]C++: Calling private function in a class from the public section of that class
[英]Initialising the same function as both public and private within a class in C++: How does that work?
我是C ++的新手,正在学习金融应用程序。 在我正在阅读的书(金融数学C ++)中,有一个部分在同一类中将相同的函数初始化为公共函数和私有函数:
class BlackScholesModel {
public: ...other members of BlackScholesModel...
std::vector<double> generateRiskNeutralPricePath(
double toDate,
int nSteps)const;
};
现在,它引入了函数generateRiskNeutralPricePath作为私有函数(带有附加的shift参数):
class BlackScholesModel {
...other members of BlackScholesModel...
std::vector<double> generateRiskNeutralPricePath(
double toDate,
int nSteps,
double drift) const;
}
因此,我想知道,我两次介绍相同的函数是否会混淆编译器? 我知道当我声明这些函数时,它将能够区分这两个函数(根据它们的参数)。 但是,这甚至是个好习惯吗? 我不想。
虽然C ++中的一个重载函数可能具有相同的名称,但实际上它们并不相同。 因此,尽管我认为这是一个奇怪的构造,但编译器不应抱怨。
这两个功能具有不同的功能签名 。
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没有函数重载。)
奖励:举个例子,说明编译器何时确实感到困惑
如何指定指向重载函数的指针?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.