함수 객체

보물창고·2023년 1월 18일
0

c++ basic 코드누리

목록 보기
45/50
post-custom-banner

알쓸잡.

  • c++은 괄호 조차도 연산자로 처리함.

함수 객체란?

: () 괄호 연산자를 제공해서, 함수처럼 사용하는 것을 말함.
operator()(인자 타입.)

예시 코드

: 함수 객체의 경우, 다른 연산자와는 다르게 호출을 하기위해 () 괄호를
하나 더 작성함.

#include <iostream>

int add(int a, int b)
{
	return a + b;
}

struct Plus
{

	int operator()(int a, int b)
	{
		return  a + b;
	}
};

int main()
{
	Plus p;
	int n = p(1, 2); // ÇÔ¼ö ó·³ »ç¿ë 
			// p.operator()(1,2)

	std::cout << n << std::endl;
	// a + b; // a.operator+ (b)
	// a - b; // a.operator-(b)
	// a();	  // a.operator()()
	// a(1, 2);//a.operator()(1,2); 	
}

함수 객체의 장점.

  1. 상태를 가지는 함수
  2. 특정 상황에서는 일반함수보다 속도가 빠름.
    -> 함수의 인자로 함수를 전달할 때 일반함수는 인라인 치환될 수 없지만,
    "함수 객체는 인라인 치환될 수 있음."

Problem : 난수만들기.

  • 힌트
    1) URand 라는 클래스를 만들자.
    2) 중복되는 수가 나오지 못하게 char 배열 만들자.
    3) rand() 함수를 사용하자.
    4) 초기셋팅을 위해서 srand(time(0)) 을 사용하라.
    5) 초기화를 하는 reset 함수도 만들어라.

  • 정답코드는
    : 블로그에 있음.

  • 내가 작성한 코드

반문

: 함수 내의 static 변수를 만들어서 하면 되지 않음??!!
-> static을 초기화하는 함수를 만들수 없지만,
--> 함수 객체 클래스의 경우, 초기화하는 함수도 만들 수 있다.

  • 관련 코드
int rr()
{
	static int arr[10];
    //arr 처리 -> 초기화를 따로 해주는 함수를 만들 수 없음. 
    return rand() % 10; 
}
profile
🔥🔥🔥
post-custom-banner

0개의 댓글