我知道这不是最好的标题,但我不知道如何解释这个我没有例子的问题。
我有一个基类(称为vector3)
class vector3 {
protected:
double x,y,z;
public:
vector3(): x(0),y(0),z(0) {}
vector3(double xin, double yin, double zin): x(xin),y(yin),z(zin) {}
~vector3() {}
//...other stuff
};
然后我有另一个派生自vector3的类,名为vector4:
class vector4 : public vector3 {
protected:
double ct;
public:
vector4(): vector3(0,0,0), ct=0 {}
vector4(double ctin): ct(ctin) {}
vector4(double ctin, double xin, double yin, double zin):
vector3(xin, yin, zin), ct(ctin) {}
vector4(double ctin, vector3 v):
vector3(v.getx(), v.gety(), v.getz()), ct(ctin) {}
~vector4() {}
//...more other stuff
};
这一切都很好,但现在我有一个名为particle
的类定义如下:
class particle : public vector4 {
protected:
//vector4 r;
double mass;
//vector3 beta;
public:
particle(): vector4(0,0,0,0), mass=0, vector3(0,0,0) {}
particle(vector4 rin, double massin, vector3 betain):
vector4(rin.getx(),rin.gety(),rin.getz(),rin.getct()),
mass=0,
vector3(betain.getx(),betain.gety(),betain.getz()) {}
~particle() {}
//...Further stuff
};
现在的问题是:
如何在粒子类的函数内返回粒子位置的x值,y值和z值,以及粒子β矢量的x值,y值和z值?
使用vector 4我只会这样做:
double getx() const {
return x;
}
double gety() const {
return y;
}
等,但我会在粒子的类中使用什么?
答案 0 :(得分:4)
位置和β矢量是粒子的属性,因此您应该使用聚合而不是继承:
class particle {
protected:
vector4 r;
double mass;
vector3 beta;
// ...
只有在子类和超类之间存在 is-a 关系的情况下才应该使用继承。
答案 1 :(得分:0)
在你的情况下,粒子是vector4,所以你可以在vector4中公开你的getters,然后直接调用particle.getX()
然而,这似乎不是一个好主意,在我看来,粒子应该包含一个向量,因为它不是vector4类的特化。
所以让我们说粒子有一个叫_vector
你可以定义一个这样的方法:
double getX(void) const
{
return (_vector.getX());
}
getY