ホームページ >バックエンド開発 >C++ >C で 2 次元配列の要素にアクセスするために [] 演算子をオーバーロードするにはどうすればよいですか?

C で 2 次元配列の要素にアクセスするために [] 演算子をオーバーロードするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 03:13:22478ブラウズ

How Can I Overload the [] Operator for Accessing Elements in a Two-Dimensional Array in C  ?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。