0

私はc++とOOPを学んでいて、「Pion」というクラスがあり、「Chessboard」クラスがあり、「Chessboard」クラスで、「Pion」クラスへのポインターの2d配列を宣言し、NULLに初期化する必要があります。ポインタ。

2D配列を宣言する方法は知っていますが、NULLポインターに初期化する方法はわかりません。

2D配列の宣言は、次のようになります。Pion * P [8] [8];

しかし、nullポインタ部分に設定されていません。

ヘルプ/ヒントは大歓迎です。

[編集]

すべての回答/ヒントに感謝しますが、私はまだ混乱しています。したがって、Chessboardというクラスがあり、「Pion」クラスにリンクするポインターの2d配列を作成する必要があります。この配列はクラスメンバーであり、NULLポインターに初期化する必要があります。

だから私は物事を試してみて、これを思いついた

.h(ヘッダーファイル)でプライベートメンバークラスを宣言しました

パイ中間子*P[8] [8];

そして、私はこれを建設業者の中に入れました

for (int x = 0; x < 8; ++x) {
    for (int y = 0; y < 8; ++y) {
        m_velden[x][y] = NULL;
    }
}

これは機能しているようですが、これが最善の解決策かどうかはわかりません

4

4 に答える 4

4

Pがローカル変数であるかクラスメンバーであるかによって異なります。最初のケースでは、宣言時にすべての要素をNULLに初期化できます

Pion *P[8][8] = {};

2番目のケースでは、コンストラクターP()の初期化リストで使用します。Chessboard

于 2012-04-27T07:32:03.120 に答える
2

いくつかの提案:まず、多次元配列がC++で面倒なことをする価値があることはめったにありません。1次元配列を使用してから、行と列を取得し、その論理位置にある要素への参照を返す関数を作成することをお勧めします。一次元配列は扱いが簡単です。

次に、std::array固定サイズのCスタイルの配列の代わりに使用するのが最適です。使用に伴うオーバーヘッドはなく、std::array多くの無料のメリットがあります。

std::unique_ptr<Pion>第3に、動的に割り当てられたオブジェクトが動的に割り当てられていると仮定して、動的に割り当てられたオブジェクトの正しい所有権と存続期間の管理を確実にするために、スマートポインター(たとえば)の使用を検討する必要があります。(もちろん、実際にポインターを使用する必要があることも確認する必要があります。ポインターを避けて、値によってオブジェクトを配列に格納できれば、それで十分な場合があり、はるかに簡単になりPionます。これが理にかなっているかどうかは異なります。特定のユースケースで。)

これらの3つの提案を念頭に置くと、次のような結果になる可能性があります。

class Chessboard
{
    std::array<std::unique_ptr<Pion>, 64> _pions;
};
于 2012-04-27T07:35:31.300 に答える
0

これを試して:

for(int i = 0; i < 8; ++i)
{
  for(int j = 0; j < 8; ++j)
  {
    P[i][j] = NULL;
  }
}
于 2012-04-27T07:30:20.340 に答える
0

考慮すべきもう1つの選択肢はベクトルです。ベクトルは、配列のサイズを動的に調整するのに非常に役立ちます。特に、クラスの「配列」に役立ちます。

于 2012-04-27T08:14:25.153 に答える