>백엔드 개발 >C++ >C에서 2차원 배열 액세스를 위해 [] 연산자를 오버로드하는 방법은 무엇입니까?

C에서 2차원 배열 액세스를 위해 [] 연산자를 오버로드하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-26 12:28:14250검색

How to Overload the [] Operator for Two-Dimensional Array Access in C  ?

2차원 배열에 대한 [] 연산자 오버로드

[]와 같은 연산자는 특정 배열에 대한 사용자 정의 동작을 제공하기 위해 오버로드될 수 있습니다. 데이터 유형. 2차원 배열의 경우 [] 연산자를 두 번 오버로드할 수 있어 편리하고 직관적인 구문이 가능합니다.

여러 인덱스에 대한 오버로딩

2차원 배열의 [] 연산자를 오버로드하려면 배열 자체를 나타내는 클래스를 정의하면 됩니다. 이 클래스 내에서 [] 연산자를 각 인덱스에 하나씩 두 번 정의할 수 있습니다.

class TwoDimensionalArray {
public:
    int operator[](int index1) {
        // Return a one-dimensional array
    }

    int operator[](int index1, int index2) {
        // Access the element at the given indices
    }
};

중첩 배열용 프록시 클래스

또는 첫 번째 오버로드에서 반환된 1차원 배열을 나타내는 프록시 클래스입니다. 이를 통해 여러 인덱스를 사용하여 요소에 액세스하는 편리한 구문이 가능해졌습니다.

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;
};

사용

이 구현을 사용하면 오버로드된 [] 연산자를 사용하여 요소에 액세스할 수 있습니다. 다음과 같이 2차원 배열에서:

ArrayOfArrays aoa;
aoa[3][5];

이 구문은 일반 배열의 요소에 액세스하는 것과 유사합니다. 2차원 배열을 사용하여 이해하기 쉽습니다.

위 내용은 C에서 2차원 배열 액세스를 위해 [] 연산자를 오버로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.