1. 연산자 오버로딩의 이해와 유형
함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공하게 된다.
즉, 이름은 하나이지만 기능은(기능을 제공하는 함수는) 여러 가지가 되는 셈이다.
마찬가지로 연산자의 오버로딩을 통해서, 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다.
연산자를 오버로딩 하는 두 가지 방법
연산자를 오버로딩 하는 방법에는 다음 두 가지가 있다.
- 멤버함수에 의한 연산자 오버로딩
- 전역함수에 의한 연산자 오버로딩
동일한 자료형을 대상으로 + 연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우,
멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출된다.
오버로딩이 불가능한 연산자의 종류
|
멤버함수 기반으로만 오버로딩이 가능한 연산자
|
연산자를 오버로딩 하는데 있어서의 주의 사항
- 본래의 의도를 벗어난 형태의 연산자 오버로딩은 좋지 않다.
- 연산자의 우선순위와 결합성은 바뀌지 않는다.
- 매개변수의 디폴트 값 설정이 불가능하다.
- 연산자의 순수 기능까지 빼앗을 수는 없다.
2. 단항 연산자의 오버로딩
피연산자가 두 개인 이항 연산자와 피연산자가 한 개인 단항 연산자의 가장 큰 차이점은 피연산자의 개수이다.
그리고 이에 따른 연산자 오버로딩의 차이점은 매개변수의 개수에서 발견된다.
증가, 감소 연산자의 오버로딩
대표적인 단항 연산자로는 다음 두 가지가 있다.
- 1 증가 연산자 ++
- 1 감소 연산자 --
전위증가와 후위증가의 구분
++ 연산자와 -- 연산자는 피연산자의 위치에 따라서 의미가 달라진다.
C++에서는 오버로딩 된 전위 및 후위 연산에 대한 해석 방식에 대해 다음의 규칙을 정해놓고 있다.
++pos → pos.operator++(); pos++ → pos.operator++(int);
--pos → pos.operator--(); pos-- → pos.operator--(int); |
키워드 int를 이용해서 후위연산에 대한 함수를 전위연산에 대한 함수와 구분하고 있다.
물론 여기서 사용된 int는 단지 후위연산을 구분하기 위한 목적으로 선택된 것일 뿐,
int형 데이터를 인자로 전달하라는 뜻과는 거리가 멀다. 아니 아무 상관이 없다.
- 윤성우 저, 열혈강의 C++ 프로그래밍 中 -
'Programming Study > C++' 카테고리의 다른 글
String 클래스의 디자인 (0) | 2014.10.06 |
---|---|
연산자 오버로딩_2 (0) | 2014.10.03 |
가상(Virtual)의 원리와 다중상속(Multiple Inheritance) (0) | 2014.09.30 |
상속과 다형성(Polymorphism) (0) | 2014.09.29 |
상속(Inheritance)의 이해 (0) | 2014.09.27 |