2 次元配列の [] 演算子のオーバーロード
2 次元配列は、行と列に編成された要素のコレクションです。 C では、2 次元配列は通常、ポインターの配列へのポインターとして格納され、各ポインターは行内の要素の配列を指します。
[] 演算子のオーバーロード
C では、 [] 演算子をオーバーロードして配列の要素にアクセスすることができます。デフォルトでは、[] 演算子は単一の整数インデックスを受け取り、配列内の対応する要素への参照を返します。
2 次元のオーバーロード
へのアクセスを許可するには2 つのインデックスを使用する 2 次元配列の要素では、[] 演算子を 2 回オーバーロードできます。これを行うには、配列の行を表すネストされたクラスを作成し、親クラスとネストされたクラスの両方の [] 演算子をオーバーロードします。
コード例
これは、オーバーロードされた [] 演算子を使用した 2 次元配列クラスの実装例です。
class ArrayOfArrays { public: ArrayOfArrays() { _arrayofarrays = new int*[10]; for(int i = 0; i < 10; ++i) _arrayofarrays[i] = new int[10]; } class Proxy { public: Proxy(int* _array) : _array(_array) { } int operator[](int index) { return _array[index]; } private: int* _array; }; Proxy operator[](int index) { return Proxy(_arrayofarrays[index]); } private: int** _arrayofarrays; };
この例では、たとえば、ArrayOfArrays クラスは 2 次元配列全体を表し、Proxy クラスは配列の行を表します。 [] 演算子は ArrayOfArrays クラスと Proxy クラスの両方でオーバーロードされており、それぞれ 1 つまたは 2 つのインデックスを使用して要素にアクセスできます。
使用法
ArrayOfArrays を使用するにはクラスでは、インスタンスを作成し、[] を使用して要素にアクセスできます。演算子:
ArrayOfArrays aoa; aoa[3][5]; // Accesses the element at row 3, column 5
この方法で [] 演算子をオーバーロードすると、1 次元配列の要素にアクセスするのと同様の構文を使用して 2 次元配列の要素にアクセスできます。
以上がC で 2 次元配列の要素にアクセスするために [] 演算子をオーバーロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。