c++ - C++中的多个降序对象

标签 c++ class object

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

基本上我有对象类型“reciever”。每个“接收者”都有特定的变量来存储数据流中的信息。但是,每个“接收者”都有 32 个可能的“ channel ”。每个 channel 都有更多的数据变量要存储。

假设我希望程序最多有 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 个 channel 绑定(bind)到单个 base 对象吗?

最佳答案

接收者与 channel 是一对多的关系。如果你知道你总是有 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;

};

这是最简单的变体。使用指针数组可能更好(如果 channel 不存在/未使用,则将 channel 设置为 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 个,那么有更好的方法来存储它,就像您在上面的接收器中使用 channel 一样。您还可以将接收器封装到顶级类中,并在其中管理接收器数组。

还要注意:

Channels channel[100][32];

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

祝你好运!

关于c++ - C++中的多个降序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318684/

相关文章:

c++ - Google Filament渲染引擎分割错误

c++ - 如何在 C++ 中使用堆栈、队列或 BST 对文件中的记录进行排序?

python - 在这里和那里创建具有大量导入函数的类

php - 在类方法中访问类属性

c++ - 将 unicode 字符串转换为字符串

不允许声明 Java 变量

Javascript对象递归查找最深层次的项目

c++ - 对双倍递增的 OutputIterator 的取消引用赋值

带有行尾的 C++ 字符串用于归档空行

javascript - 打印警报窗口中对象的值