2025. 5. 3. 17:33ㆍProgramming Language/C++
1. 호출 연산자
호출 연산자(call operator)란 C++에서 () 괄호를 사용하는 연산자를 말한다.
이를 오버로딩하면 함수처럼 객체(인자) 형식으로 객체를 함수처럼 호출할 수 있게 만들 수 있게 된다.
2. 호출연산자의 정의
호출 연산자는
반환타입 operator(){매개변수} const{
// 구현코드
}
와 같이 구현된다.
실제로 만드는 방법을 한번 보면
이렇게 호출되었을때 두 수를 비교해서 큰 숫자를 반환하는 함수 오퍼레이터를 오버로딩 해본다면
이렇게 구현할 수 있다.
이렇게 cout을 조금 변경해서 출력해보면
이렇게 잘 출력하는 것을 볼 수 있다.
이걸 왜 쓰는 거지? 싶을 수 있는데 이건 일반적인 함수와는 다르게 상태를 보관할 수 있다는 점이 장점이다.
일반적인 함수의 경우 일회성으로 끝나게 되지만 클래스인 경우는 이 상태를 저장할 수 있다는 것이다.
한번 확인해보는게 좀 더 알기 쉬우니 한번 보자.
우리가 입력한 함수에 하나의 숫자를 전달하도록 변경해보고
이제 함수 연산자에 전달한 값들이 전달되는 값이 1회성이 아니라 누적되어 전달 될때 마다 비교하여 최대 값을 반환해주는 형태로 변경해주려고 한다.
먼저 Compare 클래스에 int로 멤버 변수를 하나 생성해주고
멤버 변수의 기본 값을 integer의 가장 작은 값을 넣어주기위해서
numeric을 include 해주고
이렇게 넣어주자.
그리고 return 값을
이렇게 넣어주고 m_num이 변경되니 const는 지워주자.
C++에서는 operator() 호출 연산자를 오버로딩한 객체를 "함수 객체", 또는 펑터(functor) 라고 부른다.
이런 친구들이 stl이란 것에서 많이 쓰인다고 한다.(for-each에서 사용... 보통 algorithm 라이브러리에서 많이 쓰인다고함, 나중에 stl을 볼 때볼거라고 함...)
이런 애들도 결국 펑터로 구현되어 있다고 보면 됨
그냥 그렇다고만 알고 넘어가자
'Programming Language > C++' 카테고리의 다른 글
Part2::Ch 03. 상속 - 01. 상속의 기본 (0) | 2025.05.04 |
---|---|
Part2::Ch 02. 연산자 오버로딩- 10. 사용자 정의 리터럴 (0) | 2025.05.03 |
Part2::Ch 02. 연산자 오버로딩- 08. 변환 연산자 오버로딩, 변환 생성자, explicit (0) | 2025.05.03 |
Part2::Ch 02. 연산자 오버로딩- 07. 대입 연산자 오버로딩, 복사 생성자 (0) | 2025.05.03 |
Part2::Ch 02. 연산자 오버로딩- 06. 첨자 연산자 오버로딩 (0) | 2025.05.02 |