簡體   English   中英

C ++如何區分派生類中的基類?

[英]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派生的類,稱為ve​​ctor4:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM