()연산자 오버로딩과 펑터(Functor)
Programming/C++ 2012. 10. 7. 23:24 |함수 호출에 사용되는, 인자의 전달에 사용되는 () 도 연산자이다. 따라서 이 연산자 역시 오버로딩이 가능한 연산자이다.
ex) adder(4, 5); 가 있다면 adder.operator()(4, 5); 이렇게 해석이 된다.
ㅁ
위 예제에서 정의한 Adder 클래스와 같이 함수처럼 동작하는 클래스를 가리켜 '펑터(Functor)' 라 한다.
그리고 '함수 오브젝트(Function Object)' 라고도 불린다.
펑터의 위력 & 활용 예
- 펑터는 함수 또는 객체의 동작방식에 유연함을 제공할 때 주로 사용된다.
매개변수 형이 SortRule 의 참조형이므로, SortRule 클래스를 상속하는 AscendingSort 클래스와 DescendingSort 클래스의 객체는 인자로 전달 가능하다. 그리고 SortRule 의 operator() 함수는 virtual 로 선언되었으니, 유도 클래스의 operator() 함수가 대신 호출된다.
때문에 펑터로 무엇이 전달되느냐에 따라서 정렬의 기준이 바뀌게 된다. 그리고 이것이 펑터를 정의하는 이유이다.
'Programming > C++' 카테고리의 다른 글
string 클래스의 디자인 (0) | 2012.10.09 |
---|---|
임시객체로 자동 형 변환과 형 변환 연산자(Conversion Operator) (0) | 2012.10.08 |
스마트 포인터 (0) | 2012.10.04 |
포인터 연산자 오버로딩 (0) | 2012.10.04 |
new, delete 연산자의 오버로딩 (0) | 2012.09.27 |