在多态性中重新定义功能(虚拟),具有不同数量的参数

Redefined function ( virtual ) in polymorphism with different number of arguments

本文关键字:参数 功能 多态性 新定义 定义 虚拟      更新时间:2023-10-16

假设我有一类粒子:

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.)};
};