c ++中的多个降序对象

时间:2012-11-10 02:34:00

标签: c++ class object

我不熟悉使用C ++和面向对象编程。我的问题是如何将多个对象与多个子类对象链接起来,每个子类对象都有多个数据变量来跟踪?

基本上我有对象类型“reciever”。每个“接收器”都有特定的变量来存储数据流中的入口。但是,每个“接收器”都有32个可能的“通道”。每个频道都有更多要存储的数据变量。

说我希望程序最多有100名接收者。构建这个的最佳方法是什么?我一直这么想:

    class BaseStation{
public:
    string baseID;
    int numberSat;
    FP64 timeUTC;
    INT16U week;
    FP64 GPStoUTCoffset;
    FP64 GLOtoUTCoffset;
    INT8S recieverTimeOffset;
    FP64 posX; //geocentric coordinates in meters
    FP64 posY;
    FP64 posZ;
    FP64 rmsX;  //expected root mean square error of coordinates
    FP64 rmsY;
    FP64 rmsZ;
 };

class Channels : public BaseStation
{
public:
    INT8U systemID;
    INT8U satID;
    INT8U GlonassNumber;
    INT8U SNR;         //signal to noise ratio
    FP64 carrierPhase; //cylces
    FP64 psuedoRange;  //milliseconds
    FP64 doppler;      //HZ cycles

    FP64 tropDelay; //meters
    FP64 ionoDelay; //meters
};

然后创建像:

这样的对象
    Channels base[100];
Channels channel[100][32];

除了确保基本和通道的数组指针都相同之外,有没有办法将32个通道绑定到单个基础对象?

1 个答案:

答案 0 :(得分:0)

接收者与频道有一对多的关系。如果你知道你总是有32,你可以这样做:

class Receiver {

    Channel channels[32];

    /* variables specific to a receiver */

    string baseID;
    int numberSat;
    FP64 timeUTC;
    INT16U week;
    FP64 GPStoUTCoffset;
    FP64 GLOtoUTCoffset;
    INT8S recieverTimeOffset;
    FP64 posX; //geocentric coordinates in meters
    FP64 posY;
    FP64 posZ;
    FP64 rmsX;  //expected root mean square error of coordinates
    FP64 rmsY;
    FP64 rmsZ;

};

这是最简单的变化。它可能优于使用指针数组(如果它们不存在/正在使用中,则将通道设置为NULL)。或者,您可以考虑使用STL::vector

class Channel {

    /* variables specific a single channel */

    INT8U systemID;
    INT8U satID;
    INT8U GlonassNumber;
    INT8U SNR;         //signal to noise ratio
    FP64 carrierPhase; //cylces
    FP64 psuedoRange;  //milliseconds
    FP64 doppler;      //HZ cycles

    FP64 tropDelay; //meters
    FP64 ionoDelay; //meters

};

然后在顶级模块中,创建一个包含100个接收器的数组:

Receiver allReceivers[100];

同样,如果你不会总是有100个,那么就像在上面的接收器中使用频道一样,有更好的方法来存储它。您还可以将接收器封装到顶级类中,并在那里管理接收器阵列。

还要注意:

Channels channel[100][32];

在这里,您要声明一个二维数组的通道。这可能有效,但是使用封装接收器中的通道集(以建模关系)是更好的OOP。

祝你好运!