[01-2] 함수 오버로딩 (Function Overloading)

김민성·2022년 7월 10일
post-thumbnail

함수 오버로딩의 이해

C언어에서는 다음과 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다. 함수의 이름이 같아 컴파일 에러가 발생한다.

int MyFunc(int num) {
	num++;
    return num;
}

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

그러나 C++에서는 허용된다!
이는 <함수 오버로딩> 에 의해 가능한 것이다.

int main(void) {
	MyFunc(20); //MyFunc(int num) 함수의 호출
    MyFunc(30, 40); //MyFunc(int a, int b) 함수의 호출
    return 0;
}

이름은 같더라도 함수호출 시 전달되는 인자를 통해 호출하고자 하는 함수의 구분이 가능하다!

위에 같이 함수 오버로딩을 하기 위해서는
매개변수의 선언이 달라야 한다.
매개변수의 자료형이 다르거나, 매개변수의 개수가 다르거나 해야한다.

하지만 다음과 같은 경우는 함수 오버로딩의 조건을 만족시키지 못한다.

void MyFunc(int n)
int MyFunc(int n)

위의 두 함수는 반환형이 다르다. 반환형은 호출되는 함수를 구분하는 기준이 될 수 없기 때문에 위와 같은 형태는 컴파일 오류로 이어진다!

자! 그럼 간단히 함수를 오버로딩 하고 있는 예제를 소개하겠다.

#include <iostream>

void MyFunc(void) 
{
    std::cout<<"MyFunc(void) called"<<std::endl;
}

void MyFunc(char c) 
{
    std::cout<<"MyFunc(char c) called"<<std::endl;
}

void MyFunc(int a, int b) 
{
    std::cout<<"MyFunc(int a, int b) called"<<std::endl;
}

int main(void)
{
    MyFunc();
    MyFunc('A');
    MyFunc(12, 13);
    return 0;
}
MyFunc(void) called
MyFunc(char c) called
MyFunc(int a, int b) called

MyFunc()는 MyFunc(void)를,
MyFunc('A')는 MyFunc(char c)를,
MyFunc(12, 13)는 MyFunc(int a, int b)를 각각 호출하였다.

profile
다양한 활동을 통해 인사이트를 얻는 것을 즐깁니다. 저 또한 인사이트를 주는 사람이 되고자 합니다.

0개의 댓글