2차원 배열 인덱스 연산자 구현

Challenge and Frustration·2021년 9월 30일
0

문제
2차원 배열을 클래스를 이용하여 직접 구현하는 문제이다.
ex)

arr2d[n][m] == (arr2d.operator[](n))[m] == ((반환값).operator[])(m)

이렇게 동작하도록 구현하는 것이다.

접근 방식
처음: 두 번째 항과 세 번째 항의 함수 이름과 매개변수(정수)가 같지만 반환형이 다르다. 고로 두 함수는 다른 함수여야 한다. 그래서 함수 오버로딩을 고려했다.
제한: 함수 오버로딩은 매개변수, const로 구분한다. 반환형은 오버로딩의 기준이 되지 못한다.고로 오버로딩 불가능하다.

두번째: 두 함수는 서로 달라야 한다. 하지만 오버로딩은 불가능하다. 그러므로 클래스를 두 개를 정의한다. 그렇게 하면 이름도 같고 매개변수도 같지만 서로 다른 객체에 속하기 때문에 중첩되지 않는다.

문제: 그렇다면 두 클래스를 어떻게 연관지을 것인가? 마치 이차원 배열인 것처럼.
해결: 하나의 클래스에 객체 배열 포인터를 멤버로 둔다. 그리고 operator[] 함수를 통해 해당 포인터가 가리키는 n번째 객체를 반환한다. 그리고 그 객체의 클래스에 operator[] 함수를 정의한다. 그리고 operator[](아까와는 다른 클래스에 정의된 함수)를 통해 배열에 저장된 정수를 반환하도록 한다. 물론 그러려면 해당 클래스에 배열을 멤버 변수로 가져야 할 것이다.

핵심
1. 반환형은 함수의 오버로딩 기준이 되지 못한다.
2. 두 클래스를 연관지은 방법 - 첫 클래스의 반환형은 다른 클래스여야 한다. 첫 클래스의 변수를 다른 클래스의 포인터로 두어 연관지었다.

0개의 댓글

관련 채용 정보