본문 바로가기

연산자 오버로딩6

[ C++ ] << 와 >> 연산자 오버로딩 예제 2019. 11. 28.
[ C++ ] 배열 클래스와 인덱스 연산자 오버로딩 배열 접근 연산자(인덱스 연산자)인 [ ]을 오버 로딩할 것인데, 이건 멤버 함수 기반으로만 오버 로딩이 가능한 연산자이다. 이것 외에도 = 대입 연산자 ( ) 함수 호출 연산자 -> 포인터 연산자 총 4개는 멤버함수 기반으로만 오버 로딩이 가능한 연산자이다. 그럼 배열 클래스를 생성하고, 인덱스 연산자를 오버 로딩을 해보자. Int형 데이터를 저장하는 배열 클래스를 선언해 보았다. arr 크기를 5로 잡고 0번에는 1 1번에는 2 2번에는 3 3번에는 4 4번에는 5 값을 저장하였다. 근데 여기서 0~4번이 아닌 다른 인덱스를 접근하면 어떻게 될까? arr [5]에 접근하니까 이상한 데이터를 받아온다. 이렇듯 C와 C++은 기본적으로 배열에서 경계 검사를 하지 않는다. 그래서 벗어난 범위의 데이터를 가.. 2019. 10. 11.
[ C++ ] 단항 연산자 오버로딩 대표적인 단항 연산자는 ++ 와 -- 두 가지가 있다. ++temp 이렇게 단항 연산자를 사용하는데, 멤버함수로는 temp.operator++()로 표현이 될 것이고, 전역 함수로는 operator++(temp)가 될 것이다. 전역 함수의 경우는 피연산자가 모두 인자로 전달되므로, 이렇게 해석된다. 그럼 먼저 단항 연산자 오버 로딩의 예시를 보자. ++ 연산자는 멤버 함수에 의한 오버 로딩이고 -- 연산자는 전역 함수에 의한 오버 로딩이다. 그럼 이때까지는 전위 증가를 구현했는데 단항 연산자의 후위 증가는 어떻게 구현을 할까? 구분하는 방법은 간단하다. ++temp는 temp.operator++() temp++은 temp.operator++(int) 또는 operator++(temp, int) --tem.. 2019. 10. 10.
[ C++ ] 연산자 오버로딩의 교환 법칙 교환 법칙이란 'A+B= B+A'을 뜻한다. 즉, 피연산자의 위치는 연산의 결과에 아무런 영향을 미치지 않는다는 법칙인데, 대표적으로 곱셈 연산과 덧셈 연산이 있다. 먼저 예제를 보자. Dot 클래스에 곱셈 연산자가 오버로딩이 되어있다. 객체 * 뒤에 int형 데이터가 오면 x와 y좌표 값을 데이터만큼 곱해준다. 그래서 dot2는 dot1에 2를 곱하여 x좌표가 2, y좌표가 4가 된 것을 확인할 수 있다. 근데 교환법칙에 의해 * 뒤에 객체가 오게 되면 어떻게 해야 할까? 이런 문제가 발생한다. 이전 연산자 오버로딩 포스트에서 전역 함수에 의한 연산자 오버 로딩이 필요한 경우가 있다고 했는데, 이럴 때 필요하다. 다음과 같이 해결하면 된다. 그럼 전역함수에 의해서 멤버 함수의 연산자 오버 로딩에 접근할.. 2019. 10. 10.