1

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

基本上我有对象类型“接收者”。每个“接收者”都有特定的变量来存储传入数据流。然而,每个“接收者”有 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];

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

4

1 回答 1

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。

祝你好运!

于 2012-11-10T02:58:53.083 回答