【发布时间】:2020-12-02 15:06:20
【问题描述】:
我在 IonizationTunnel.h 文件中遇到了这个被覆盖的函数调用 operator():
void operator()(Particles *, std::vector<double>*, unsigned int, int ipart_ref = 0) override;
这与 Ionization.h 文件中的虚拟 void operator() 的参数完全匹配:
virtual void operator()(Particles *, std::vector<double>*, unsigned int, int ipart_ref = 0) {}
电离是基类。 IonizationTunnel 是派生类。
2 个问题:
- 参数列表中没有名称的参数是什么意思? IE。指向 Particles 对象的指针,Particles*。或者没有名称的 unsigned int。为什么它们会这样?它们是什么意思?
- 在 () 中设置一个名称的参数(因此是一个常用参数)是什么意思? IE。 int ipart_ref = 0。这是否意味着当我们调用 IonizationTunnelObject.operator()(arguments) 时,我们必须指定 3 个参数而不是 4 个,即使没有写在我们指定的 3 个参数中,最后一个参数 (ipart_ref) 也会被默默地推断为 0?或者我们可以使用 4 个参数调用 IonizationTunnelObject.operator()(arguments) 并将 ipart_ref 设置为我们想要的任何整数值?
我习惯于看到 foo(int x) {code},而我从未见过 foo(int) {code}。
非常感谢!
【问题讨论】:
-
在函数的声明中,变量的名称被忽略,只是为了便于阅读。除了简单的习惯之外,将其保留的常见原因如下:如果您有不使用其中一个参数的重载函数,您也可以在实现中保留名称,以便让用户清楚未使用该变量。此外,这避免了编译器关于未使用变量的警告。
-
非常感谢!
标签: c++ oop arguments virtual-functions