0

最初に自分の状況を説明しようと思います。内部に構造を持つクラスがあり、このコンテナcalsの配列があります

class A
{
    struct B
    {
        int I;
        B *next;
    };

    B *objOfB; //Array of structures
    B *lastB;  //Pointer to last objOfB element

public:
    //Method for adding values to objOfB
    void addB(int i)
    {
        B *temp = new B;
        temp->I = i;
        temp->next = NULL;
        if(ing == NULL)
        {
            last = temp;
            objOfB = temp;
        }
        else
        {
            last->next = temp;
            last = temp;
        }
    }
};

オブジェクトの配列が一部の関数ファイルで使用されている

A * objA = A[100];

私が理解できないのは、の単一の値をどのように渡すかですobjOfB。の最初から最後まで続く簡単な例がありobjOfBます。

for (B *temp = objOfB; temp != NULL; temp = temp->next) {
  cout << temp->I << endl;
}

このループを関数ファイルで実行したいのですが、すべてを返さないメソッドは考えられませんobjOfB(ループの最初の部分で使用されますB *temp = objOfB;)。このループを実行するために作成したメソッドは次のとおりです。

B listOfBs() { return *objOfB;  }
B toNextB() { return *objOfB->next; }
bool noLastB(){ return objOfB->next != NULL; }

そしてそれがどのように機能するかはループで使用されるかもしれません:

for (B *temp = listOfBs(); noLastB(); temp = toNextB()) {
  cout << temp->I << endl;
}

ただし、3つの方法すべてがこのループに適しているわけではないことを理解しています。したがって、値を返すためのメソッドと、次の値を読み取る必要があることを通知するためのメソッドが必要です...私が達成しようとしていることがより明確にならないことを願っています。

メソッドを使用して構造体の値のコンテナクラスの動的配列を渡す方法は?

4

1 に答える 1

0

私が理解していることから、クラスA(単一リンクリストのラッパーを表す)と、この単純なstruct Bネストされたクラスがあります:

struct B
{
    int I;
    B *next;
};

Aまた、このリストを反復処理するためのより簡単な方法を提供するインターフェイスもクラスに提供する必要があります。

最初は、このデータ メンバーは非常に混乱します。

B *objOfB; //Array of structures

最初の要素へのポインターとして扱っているためです。良い開始点は、名前を次のように変更することです。B *head;これで、 の各インスタンスが要素をB指すことができnext、 へのポインターが得られますhead。最後の要素は にnext等しい要素でありNULL、 は必要ありませんB *lastB;

次に、提供しようとしたメソッドがあまり意味をなさないことに気付くでしょう。

B listOfBs() { return *head;  }
B toNextB() { return *head->next; }
bool noLastB(){ return head->next != NULL; }

これらのメソッドが値によって返される理由はありませstruct Bん。とにかく、の定義が呼び出し元に表示される必要があるためです。KISS の原則のためheadに、公開データ メンバーをAに変更し、名前Aをより意味のある名前に変更しますMyList。次に、呼び出し元にこれをさせます:

MyList list;
...
for (B* b = list.head; b != NULL; b = b->next) {
    ...
}
于 2013-03-22T10:46:59.387 に答える