[c++] 함수 오버로딩과 포인터로의 호출 차이

C++에서 함수 오버로딩과 포인터를 사용하여 함수를 호출하는 방법에는 차이가 있습니다. 이 두 가지 방법에 대해 각각 알아보겠습니다.

함수 오버로딩

함수 오버로딩은 같은 이름을 가진 여러 개의 함수를 정의하는 것을 말합니다. 이 함수들은 매개변수의 개수 또는 타입에 따라 구별됩니다. 예를 들어, 다음과 같이 두 개의 add 함수를 정의할 수 있습니다.

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

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

이때, 함수 오버로딩을 사용하여 매개변수의 개수나 타입에 따라 적절한 함수가 호출됩니다.

포인터로의 호출

함수 포인터를 사용하여 함수를 가리키는 포인터를 선언하고 호출할 수 있습니다.

#include <iostream>
using namespace std;

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

int main() {
    void (*ptr)() = sayHello;   // 함수를 가리키는 포인터 선언
    ptr();                      // 함수 포인터를 사용하여 함수 호출
    return 0;
}

함수 오버로딩과 포인터로의 호출 차이

함수 오버로딩은 컴파일러가 호출할 함수를 선택하는 과정에서 매개변수의 타입 및 개수를 고려합니다. 반면에 포인터로의 호출은 미리 정의된 함수를 가리키는 포인터를 사용하여 호출합니다.

따라서 함수 오버로딩은 호출될 함수가 컴파일 시간에 결정되지만, 포인터를 사용한 함수 호출은 실행 시간에 동적으로 결정됩니다.

이렇듯 함수 오버로딩과 포인터를 사용한 함수 호출은 서로 다른 호출 메커니즘을 가지고 있으며, 각각의 장단점을 고려하여 적절히 활용할 수 있습니다.

이상으로 C++에서 함수 오버로딩과 포인터로의 함수 호출에 대한 내용을 알아보았습니다.

참고 자료


revision

글에서 함수 포인터를 사용한 예제 코드를 추가하여 내용을 보다 명확히 전달할 수 있게 수정했습니다.