假设我有一类粒子:
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个参数。
答案 0 :(得分:0)
如果你真的想要覆盖该方法,它必须具有相同的签名,其中包括参数。这意味着,在这种情况下,将有2个参数。是的,默认参数是有效的,但是如果你有Particles *那就不会帮助你,就像@molbdnilo提到的那样。如果需要,可以在方法体中检查该参数值是否为0。 否则,您可以使用不同的签名创建一个新方法,即使用1个参数,但您只能使用Photons *。 无论如何,这取决于你将如何使用这些类。
答案 1 :(得分:0)
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.)};
};