(C++) 9.1 산술 연산자 오버로딩 하기

이준우·2021년 11월 24일
0

지금까지 배운 내용을 잠시 요약해보자.

코드를 보면 Cents class를 이용하여 구현되어 있다. 생성자를 사용하여 안에서 초기화를 하고 있다.

우리가 눈여겨 봐야할 곳은 중간 부분의 add 함수이다. 여기서는 const 매개변수를 사용하냐 아니냐에 대해 제대로 알고 넘어가야 한다. const Cents& c1같은 경우에는 class 내부에 있는 getCents()의 const로 넘어간다. 이 부분은 저번에도 설명하였지만, c1과 c2의 포인터를 주고 이를 통해 멤버 값을 도출하는 것이다. getCents()는 단 하나의 주소를 갖고 있기 때문에, 이를 여러개 만들 수 없으므로 const로 설정하여 접근하는 것이다.

근데 우리가 눈여겨 봐야할 것은 Cents &c_out이다. 무엇일까? 왜 굳이? 코드를 보면 알듯이 c_out은 L-value로 구성되어 있다. 그렇기 때문에, const Cents &c_out으로 매개변수를 선언하면 compiler가 오류를 낸다. 그렇기 때문에 이름이 같은 함수를 만들지만 const가 아닌 오버로딩 함수를 만들어서 접근하도록 하는 것이다.


위의 코드에서 조금만 바꾸면, 다음과 같이 구현할 수 있다. 근데 뭔가 오류가 난다. 이 오류가 나는 이유는 연산자가 오버로딩이 안되어 있어서 그렇다. 지금은 무슨말인지 모르겠지만 다음을 보자. 연산자가 오버로딩이 안되어 있어서 다음과 같이 구현해야 제대로 동작을 하게 된다.


이런 식으로 friend를 사용하여 구현하는 방법도 있다. 근데 friend 사용하지 않고 멤버로 접근하면 되지 않을까? 라고 생각하는 것이 당연하다.

(* friend는 class 외부에서 class 내부를 참조할 때 사용하는 것인데, main()에서 사용하기 때문에, 이 코드가 오류가 없는 것이다.)

friend를 없애면 다음과 같은 오류를 발생시킨다. 뭐지? 더하기 연산을 하려면 무조건 두개 이상의 매개변수가 있어야 하는 것이 아닐까? 라고 생각할 수 있는데, 눈치가 있으면 this가 생각이 나야 한다.

profile
꿈꾸는 CV

0개의 댓글