[英]c++ how differentiate between base classes in a derived class?
我知道這不是最好的標題,但是我不確定如何在沒有示例的情況下解釋這個問題。
我有一個基類(稱為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值,以及粒子beta矢量的x值,y值和z值?
使用向量4,我會做:
double getx() const {
return x;
}
double gety() const {
return y;
}
等等,但是我將在粒子的類中使用什么?
位置和beta向量是粒子的屬性,因此您應該使用聚合而不是繼承:
class particle {
protected:
vector4 r;
double mass;
vector3 beta;
// ...
僅應在子類和超類之間存在is -a關系的地方使用繼承。
在您的情況下,粒子是一個vector4,因此您可以在vector4中定義公共的吸氣劑,然后直接調用particle.getX()
但是,在我看來,這似乎不是一個好主意,因為粒子不是vector4類的特化對象,所以應該包含一個向量。
因此,假設粒子具有一個稱為_vector
的向量
您可以定義這樣的方法:
double getX(void) const
{
return (_vector.getX());
}
getY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.