5.1 연산자 오버로딩(비교, 대입 연산자)
Last updated
Last updated
일단 연산자 오버로딩을 사용하기 위해서는, 다음과 같이 오버로딩을 원하는 연산자 함수를 제작하면 된다. -> 참고로 아래 방법 외에는 함수 이름으로 연산자를 절대 넣을 수 없다.
예를 들어 == 연산자를 오버로딩 하고 싶다면 아래와 같이 함수를 정의할 수 있다.
이제 우리가 str==str2 라는 명령을 한다면 이는 str.operator==(str2) 로 내부적으로 변환되어 처리된다. 그리고 그 결과값을 리턴하게 된다. 간단하게 만든 코드는 다음과 같다.
기본적으로 대입 연산자 함수는 기존의 사칙연산 함수같이 자기 자신의 레퍼런스를 리턴한다. -> 이 때 Complex 타입이 아닌 Complex& 타입을 리턴하는 이유는 대입 연산 이후에 불필요한 복사를 방지하기 위해서이다.
또한, 아래의 코드에서 b=c; 가 b ;를 리턴해야지, a=b; 가 성공적으로 수행이 가능하기 떄문이다.
이와 같은 사실을 바탕으로 operator= 함수를 완성시키면 아래와 같다.
아래 코드를 실행시켜 보면 정상적으로 실행되는 것을 확인할 수 있다.
한가지 재밌는 사실은, 굳이 operator=를 만들지 않더라도, 위 소스를 컴파일 하면 잘 작동한다는 점이다. 이는 컴파일러가 디폴트 대입 연산자(default assignmenet operator) 를 지원하고 있기 때문이다. -> 클래스 내부적으로 동적할당이 있다면, 직접 구현해주어야 한다. ( because shallow copy)