1

私は一般的に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チャネルを単一のベースオブジェクトに関連付ける方法はありますか?

4

1 に答える 1

0

レシーバーはチャネルと 1 対多の関係にあります。常に 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];

ここでは、チャネルの 2 次元配列を宣言しています。これは機能する可能性がありますが、(関係をモデル化するために) 受信側でチャネルのセットをカプセル化することを使用する方が OOP の方が優れています。

幸運を!

于 2012-11-10T02:58:53.083 に答える