[C++STL] 연산자 오버로딩 - 임시 객체

박남호·2022년 11월 24일
0

함수 호출 연산자 오버로딩
Print(10)이라는 함수 호출 문장은 다음 세 가지로 해석할 수 있다.
1. 함수 호출 : Print가 함수 이름
2. 함수 포인터 : Print가 함수 포인터
3. 함수 객체 : Print가 함수 객체

#include <iostream>
using namespace std;

struct FuncObject {
public:
	void operator()(int arg) const
	{
		cout << "정수 : " << arg << endl;
	}
    void operator()(int arg1, int arg2) const
	{
		cout << "정수 : " << arg << endl;
	}
};
void Print1(int arg) 
{
	cout << "정수 : " << arg << endl;
}
int main() 
{
	//exam 1
	void(*Print2)(int) = Print1;
    
	FuncObject Print3;
    
	Print1(10); 함수 호출
    
	Print2(10); 함수 포인터
    
	Print3(10); 함수 객체
    
	//exam 2
    FuncObject print;
    
    print(10,20); //객체 생성 후 호출 (암시적)
    
    print.operator()(10,20); //객체 생성 후 호출 (명시적)
    
    FuncObject()(10,20); //임시 객체로 호출(암시적)
    
    FuncObject.operator()(10,20); //임시 객체로 호출(암시적)
    
	return 0;
}

exam 1
Print1은 함수를 사용한 정수 출력
Print2은 함수 포인터를 사용한 정수 출력
Print3은 함수 객체를 사용한 정수 출력

exam 2
암시적 호출은 사실 명시적 호출과 같이 동작하지만 .operator()가 생략되었다고 보면된다. 그리고 임시 객체는 그 문장에서 생성되고 그 문장을 벗어나면 소멸된다.

profile
NamoPark

0개의 댓글