我不熟悉使用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个通道绑定到单个基础对象?
答案 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。
祝你好运!