[c++] 함수 오버로딩과 함수 포인터

함수 오버로딩은 C++에서 한 가지 기능에 대해 동일한 이름을 가진 여러 개의 함수를 정의하는 것을 말합니다. 함수 시그니처(매개변수의 개수, 데이터 유형 및 순서)가 다르면 동일한 이름을 가진 함수 여러 개를 선언할 수 있습니다.

함수 오버로딩을 사용하면 동일한 작업을 수행하는 여러 함수에 동일한 이름을 부여하여 코드를 간결하게 유지할 수 있습니다. 예를 들어, 동일한 작업을 하는 함수에 대해 “add”라는 이름을 사용하여 add(int a, int b) 및 add(double a, double b) 두 가지 함수를 정의할 수 있습니다.

#include <iostream>

void add(int a, int b) {
    std::cout << "Sum is " << a + b << std::endl;
}

void add(double a, double b) {
    std::cout << "Sum is " << a + b << std::endl;
}

위의 예제에서 add 함수는 정수형 매개변수를 받는 버전과 실수형 매개변수를 받는 버전이 모두 정의되어 있습니다.

함수 포인터는 특정 함수를 가리키는 포인터로, 함수의 주소를 값으로 갖습니다. 이를 이용하면 프로그램 실행 중에 다른 함수를 호출할 수 있습니다.

아래는 함수 포인터를 선언하고 사용하는 예제입니다.

#include <iostream>

void sayHello() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    void (*ptr)() = &sayHello;  // 함수 포인터 선언과 초기화
    (*ptr)();                   // 함수 포인터를 사용하여 함수 호출
    return 0;
}

위의 예제에서 void (*ptr)()는 void형식의 매개변수를 받고 void를 반환하는 함수를 가리키는 포인터를 의미합니다. 따라서 ptrsayHello 함수를 가리키게 됩니다.

함수 오버로딩과 함수 포인터는 각각의 특성에 따라 다양한 상황에서 유용하게 활용될 수 있습니다.

자세한 내용은 아래 C++ 참조 문서를 참고해 주십시오.

https://en.cppreference.com/w/cpp/language/overloaded_functions
https://en.cppreference.com/w/cpp/language/pointer