2013년 1월 17일 목요일
연산자 오버로딩
연산자 오버로딩
1. C++에서 기본 자료형으로 사용하고 있는 연산자를 재정의 하는 것을 말합니다.
2. C++에서는 연산자 조차 함수로 취급하기 때문에 함수를 정의하는 방법과 동일한 방법으로
재정의할 수 있습니다.
3. 연산자를 함수의 형태로 오버로딩하기 때문에 재정의된 연산자를 연산자 함수(operator function)
라고도 합니다.
4. 연산자에 있어서 피연산자가 함수를 오버로딩할 때에는 전달인자로 구현됩니다.
5. 연산자를 정의할 때 전달인수의 자료형에 의해 그 연산자를 사용할 수 있는 자료형이 결정됩니다.
연산자 정의 기본 형식
반환형 operator 연산자(인수1,인수2,....)//연산자 함수는 함수 이름이 operator 로 정해져 있다.
{
함수의 본체
}
사칙 연산자를 오버로딩할경우에는 함수 반환형이 연산 대상과 같은 클래스이고
관계 연산자와 논리 연산자의 경우 함수 반환형은 bool이다.
연산자의 오버로딩시 주의할 점
1. C++에서 이미 사용하던 연산자만 오버로딩할 수 있습니다. $기호는 C++에서 연산자로 사용되지 않습니다. 그 때문에 operator$() 함수를 정의할 수 없습니다.
2. 이항 연산자로 쓰이던 연산자는 오버로딩할 경우 이항 연산자로만 정의할 수 있습니다.이항 연산자란 피연산자가 2개입니다. 예를 들면 10%4와 같이 %연산자는 이항 연산자 형태로 사용하여야 합니다.
3. 단항 연산자로 쓰이던 연산자는 오버로딩할 경우 단항 연산자로 정의하여야 합니다. 단항 연산자는 피연산자가 1개인 연산자입니다. 예를 들면 ++ 연산자가 단항연산자 입니다.
4. C++에서 사용하는 연산자들중 다음 연산자들은 오버로딩할 수 없습니다.
조건연산자(?:)
멤버 참조 연산자(.)
범위 연산자(::)
sizeof연산자(sizeof)
.*
5. 재정의돈 연산자는 적어도 하나의 사용자 정의형 피연산자를 가져야 합니다. 이는 기본 자료형의 재정의를 막기 위해서입니다.
6. 대부분의 연산자는 멤버 함수 또는 프랜드 함수로 재정의할 수 있습니다. 그러나 다음 연산자는 멤버 함수로만 재정의 할 수 있습니다.
대입 연산자(=)
함수 호출 연산자(())
첨자 지정 연산자([])
멤버 참조 연산자(객체 포인터에 대한, ->)
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기