CPP_어소_63_iterator (4)

CJB_ny·2022년 7월 5일
0

CPP_AROTHO

목록 보기
62/83
post-thumbnail

++ 반환 타입의 이유

전위연산자의 경우 반환타입이 iterator& (iterator를 참조하는것을 반환)

하는 이유가 뭐때문이냐?

=> ++(++k) 하는 경우를 대비하기 위하여.

이런경우 발생할 수 있기 때문에.

예외 처리 👍👍👍

우리는 iterator& 자체를 반환하면되는데
operator++ 를 오버로딩 한 것이기 때문에
indexNumber 를 하나 늘린 것을 참조하여 반환하면되기 때문에
++m_iIdx;를 해주고

예외처리를 1., 2., 3. 으로 해준다.

idx가 -1일 경우 end iterator로 보기로했다.

코드 실행

이상태에서 실행하면된다.

비교연산자 구현 ❗❗❗

나는 this, 나랑 비교할(호출된 애는 인자로) 녀석 other

현재 이 "=="라는 멤버함수를 호출 시킨 객체는 "this"

나랑 비교될 애는 otherIter이다.

각 기능 정의 다시 보기

추가한 데이터를 관리하는게 "가변배열"

가변배열에 안에 들어있는 요소들을 가르킬 수 있는 것이 "iterator"

같은 요소를 가르킬 때

이 경우에 두개의 iterator가 같다고 볼 수 있다.

이거 멤버 변수 세가지 중에 뭐가 같으면 될까?

세가지 다 같아도되고, m_pData, m_iIdx같으면될듯.

이해의 예시❗❗❗

가변배열 두개를 만들어서 각각의 iterator를 만들어서 인덱스 5번을 각각 가르킨다고 가정하자.

그러면 두개의 iterotor는 같나? => 당연히 다른 iterator이다.

(그래서 m_i_indexNumber 만으로만은 판별 못함)

operator == 구현

operator != 는 반대로 구현

같은 경우에 true 내뱉는다.

다르나요? => 같다면 false이니까

!=, == 조금더 간결하게 구현 👍👍👍

return !(*this == otherIter);

먼상황???

  • *this => "operator !=" 를 호출 시킨 객체이다.

그래서 operator != 를 호출 시켰더니

안에서 "==" => "operator =="를 다시 호출 시킨것임.

그래서

*this 와 otherIter를 operator == 로 비교를해서 나오는 bool값에

'!'로 반전 시킨 것임.


만약에 *this == otherIter한 값이 true이다. 라면

그것을 반전시키면 false가 되는데 반전을 시키는 이유는

!= 같지 않음을 나타내는 오버로딩(operator !=)이기 때문에.

비슷한 상황있다면 코드 재활용.

후위 연산자 ❗❗❗

전위와 후위는 operator함수 자체가 다르다!

호출되는 시점은 똑같기 때문에 나중에 호출 시키거나 할 수 없다.

그래서 아예 다른 함수를 만들어서 호출 시켜주어야한다.

(어떻게?)

이렇게 자기 자신을 반환 해주도록 하면

절대 후위 연산자 처럼 동작할 수 없다.

그래서

ref로 반환을 안하고 복사본을 준다.

그리고 인자로

아무런거 없는 int라고 적어주면

컴파일러가 이것을 그냥 후위연산자로 인식을 한다.

일단은 이렇게 구현을 해주고 뭐가 호출되는 지 확인을 해보도록 하자.

"++"가 앞에 붙든 뒤에 붙든 호출 시점은 똑같다.

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글