본문 바로가기

Language, IDE/C, C++

[C++] 연산자 오버로딩

C++ 연산자 오버로딩

 

C++에는 클래스를 인자로 가지는 연산자를 오버로딩할 수 있다. 연산자 오버로딩은 인자가 하나이상이 클래스여야 한다.

연산자 오버로딩의 방법으로는 세가지 방법이 있다.

 

1. 프렌드가 아닌 독립적으로 구현.

2. 클래스의 멤버로 구현.

3. 프렌드 함수로 구현.

 

※ 참고

1. = , [], ->, () 연산자는 멤버로만 구현된다.

2. 연산자 우선순위를 변경할 수 없다.

3. 단항연산자를 이항연산자로 이항연산자를 단항연산자로 오버로딩할 수 없다.

 

1. 프렌드가 아닌 독립적으로 구현.

return타입 operator 연산자(파라미터){

구현

}

일반 함수 구현과 같고 파라미터는 call-by-value와 call-by-reference모두 가능하다.

파라미터는 반드시 하나이상은 클래스가 포함되어야 한다.

파라미터가 2개이면 이항 연산자이고 파라미터가 1개이면 단항 연산자이다.

 

 

2. 클래스의 멤버로 구현.

1번의 구현에서 위치만 클래스 내부로 바뀌고

이항 연산자는 파라미터를 1개, 단항 연산자는 파라미터를 0개 가진다.

자기 자신과 파라미터로 받은 인자를 사용하기 때문에 1번 구현보다 파라미터가 1개 적다.

인자1 + 인자2 에서

인자1을 자기자신으로 가지고 인자2를 파라미터로 받는다.

위의 예제 소스에서 보면 class2의 값을 표시하는데 myclass2의 값이 나온다.

 

연산자 오버로딩 함수내에서 getter함수가 필요없기 때문에 소스가 더 간략하며 클래스 내부에서 선언되므로 캡슐화 측면에서도 좋다.

 

 

3. 프렌드 함수로 구현.

클래스내부에 프렌드 함수로써 구현한다.

클래스내부에 friend키워드만 붙이고 1번처럼 파라미터를 2개 모두 가지고 구현하지만 프렌드 함수이기 때문에 2번구현처럼 클래스의 멤버를 직접 접근할 수 있다.

 

3번구현도 2번과 마찬가지로 클래스 내부에서 선언되므로 캡슐화 측면에서 좋다.

 

 

'Language, IDE > C, C++' 카테고리의 다른 글

[C/C++] 문자 조작 함수1  (0) 2013.07.02
[C/C++] C스트링  (0) 2013.06.30
[C++] 연산자 오버로딩  (0) 2013.06.28
[C++] 프렌드 함수  (0) 2013.06.28
[C++] 클래스 디폴트 접근 제어자  (0) 2013.06.26
[C++] .연산자와 ::연산자  (0) 2013.06.26