0

たとえば、次の 2 つのクラスがあるとします。

class ChessBoard
{
    std::vector <ChessPiece> pieceList;
}

class ChessSquare
{
    std::vector <ChessPiece> pieceList;
}

私がやりたいことは、両方のクラスがまったく同じ ChessPiece ベクトルにアクセスできるようにすることです。これにより、両方のクラスがまったく同じ ChessPiece データに読み取り/書き込みアクセスできるようになります。たとえば、ChessSquare が pieceList ベクトルを更新すると、ChessBoard の対応する pieceList ベクトルも更新され、その逆も同様です。これを実装するにはどうすればよいですか?

4

6 に答える 6

4

ポインターを使用します。ベクトルへの同じポインターのコピーをそれぞれに渡します。

それぞれに a を与えるstd::shared_ptrと、どちらのクラスもそれを使用しなくなったときに参照カウントとクリーンアップが処理されるという追加の利点が得られます。

于 2013-10-23T07:03:17.730 に答える
0

チェス盤はチェスの四角で構成されているので、チェス盤クラスにベクトルを持ち、チェスの四角クラスでそれへの参照を持つことをお勧めします。おそらく次のようになります。

typedef std::vector<ChessPiece> PIECES

class ChessBoard
{
public:
    ChessBoard()
    {
        // NOTE! your app might have more squares than this:
        m_pSquare = new ChessSquare( pieceList ); 
    }

private:
    PIECES pieceList;
    ChessSquare* m_Square;
}

class ChessSquare
{
public:
    ChessSquare( const PIECES& pieces )
    : refPieceList(pieces)
    {
    }

private:
    const PIECES& refPieceList;
}
于 2013-10-23T08:11:11.127 に答える
0

ポインターを使用するのはおそらく良い方法ですが、次のようにポイントを達成する必要があると思います:

class ChessBase
{
    static std::vector <ChessPiece> pieceList;
}

class ChessBoard : ChessBase
{
//to do what you want.
}

class ChessSquare : ChessBase
{
//to do what your want.
}

各クラスのベクトルにメンバーとしてアクセスできます。

于 2013-10-23T07:48:16.697 に答える