TIL::Today I Learn

[TIL] 20230704

madylin 2023. 7. 6. 13:29
반응형

오늘 공부한 내용📓

- C++

개념 공부

함수 포인터와 멤버 함수 포인터

  • 함수 포인터
    • 함수의 주소를 저장하고 호출하는 포인터
int add (int a, int b)
{
	return a + b;
}

int subtract (int a, int b)
{
	return a - b;
}

int main()
{
	int (*funcPtr)(int, int); //함수 포인터 선언
	funcPtr = add; // add 함수를 가리키도록 초기화
	int result = funcPtr(5, 3); //함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //8 출력

	funcPtr = subtract; //subtract 함수를 가리키도록 초기화
	result = funcPtr(5, 3); //함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //2 출력

	return 0;
}

 

  • 함수 포인터 배열
int add (int a, int b)
{
	return a + b;
}

int subtract (int a, int b)
{
	return a - b;
}

int main()
{
	int (*funcPtr[2])(int, int); //함수 포인터 배열 선언
	funcPtr[0] = add; // add 함수를 가리키도록 초기화
	funcPtr[1] = subtract //subtract 함수를 가리키도록 초기화
	
	int result = funcPtr[0](5, 3); //함수 포인터 배열을 통한 함수 호출
	std::cout << result << std::endl; //8 출력

	result = funcPtr[1](5, 3); //함수 포인터 배열을 통한 함수 호출
	std::cout << result << std::endl; //2 출력

	return 0;
}

 

  • 멤버 함수 포인터
    • 클래스의 멤버 함수의 주소를 저장하고 호출하는 포인터
    • 클래스의 인스턴스를 통해 호출되어야 함
class Calculator
{
public:
	int add (int a, int b)
	{
		return a + b;
	}
	
	int subtract (int a, int b)
	{
		return a - b;
	}
}

int main()
{
	Calculator cal;
	int (Calculator::*funcPtr)(int, int); //멤버 함수 포인터 선언
	
	funcPtr = &Calculator::add; //add 멤버 함수를 가리키도록 초기화
	int result = (cal.*funcPtr)(5, 3); //멤버 함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //8 출력

	funcPtr = &Calculator::subtract; //subtract 멤버 함수를 가리키도록 초기화
	result = (cal.*funcPtr)(5, 3); //멤버 함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //2 출력

	return 0;
}

 

  • 멤버 함수 포인터 배열
    • 함수 포인터와 멤버 함수 포인터는 다른 타입으로 취급되며 호환되지 않음
class Calculator
{
public:
	int add (int a, int b)
	{
		return a + b;
	}
	
	int subtract (int a, int b)
	{
		return a - b;
	}
}

int main()
{
	Calculator cal;
	int (Calculator::*funcPtr[2])(int, int); //멤버 함수 포인터 배열 선언
	funcPtr[0] = &Calculator::add; // add 함수를 가리키도록 초기화
	funcPtr[1] = &Calculator::subtract //subtract 함수를 가리키도록 초기화

	int result = (cal.*funcPtr[0])(5, 3); //멤버 함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //8 출력

	result = (cal.*funcPtr[1])(5, 3); //멤버 함수 포인터를 통한 함수 호출
	std::cout << result << std::endl; //2 출력

	return 0;
}

 

 

제가 공부한 내용을 기록하고 있습니다.

혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!

선한 관심과 도움 감사드립니다😊

반응형

'TIL::Today I Learn' 카테고리의 다른 글

[TIL] 20230707  (0) 2023.07.08
[TIL] 20230705  (0) 2023.07.06
[TIL] 20230622  (0) 2023.06.24
[TIL] 20230621  (0) 2023.06.22
[TIL] 20230620  (0) 2023.06.21