在多态性中重新定义功能(虚拟),具有不同数量的参数
Redefined function ( virtual ) in polymorphism with different number of arguments
假设我有一类粒子:
class Particle {
public:
virtual void SetLorenzVector( Vector3&, double M );
protected:
LorenzVector P;
};
,我还有一类派生的光子:
class Photons : public Particles {
public:
virtual void SetLorentzVector ( Vector3&, /*double M = 0*/ );
};
在Photons
类中,我想重新定义函数 SetLorentzVector
,但我不想在那里执行第二个参数(因为它总是等于0(。有没有一种优雅的方式来以C++
样式进行此操作?
默认参数有效吗?如果是这样,请注意,我希望SetLorentzVector
完全需要2个参数。
如果您真的想覆盖该方法,则必须具有相同的签名,其中包括参数。这意味着,在这种情况下,将有2个参数。是的,默认参数是有效的,但是如@molbdnilo所述,如果您有粒子*,那将无济于事。如果需要,可以检查该方法的正文中该参数值为0。否则,您可以创建一个具有不同签名的新方法,即具有1个参数,但是您只能与光子*一起使用。无论如何,这取决于您要使用这些类的方式。
class Particle {
public:
void SetLorenzVector( Vector3&, double M ); // should it really be virtual?
virtual void SetLorenzVector( Vector3&) = 0;
protected:
LorenzVector P;
};
class Photons : public Particles {
public:
virtual void SetLorentzVector ( Vector3& v) {SetLorentzVector(v, 0.)};
};
相关文章:
- 对可变参数使用声明.如何选择正确的功能
- 如何在C++中调用默认模板功能参数?
- 如何从其他功能C++访问参数?
- 如何定义可变参数类模板的成员模板功能
- C++ std::enable_if - 第二个参数的功能
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 具有C++迭代器参数的多功能函数
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- C 函数调用包装器包含类成员功能作为模板参数
- 非拖动功能模板参数包的合法使用
- 组件X86转换为ARM功能呼叫,其中有不同数量的参数为ARM
- 公共功能以私人课程为参数
- 如何部分专业化功能以用元组元素作为参数调用功能
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- std ::功能作为默认参数的功能
- C 功能模板指定第二个模板参数类型
- 传递多个参数的功能,该函数将类包含到其他函数
- 别名一个模板函数,该功能没有参数可更简洁
- 如何推断for_each的模板参数功能
- 用户界面-GUI和文本模式C++设计,以消除冗余(可选参数?功能过载?)