[C++] 함수 오버로딩

서희찬·2021년 4월 28일
post-thumbnail

함수는 C언어에서 매우 중요한 위치를 차지한다!!!
그런데 이 함수 기능이 C++로 옮겨지면서 기능이 확장되었다.

함수 오버로딩의 이해

이런식의 함수 선언은 씨에서는 두 이름이 같기에 오류가 발생한다.
그런데 위의 두 함수를 그저 인자를 통해서 구분하면 함수를 구분할 수 있지 않을까?
라는 생각이 든다.

이런 식으로 말이다.
c++에서는 실제로 이를 허용하고있다!!!

그리고 이러한 형태의 함수정의르르 가리켜 함수 오버로딩 이라고 한다.

그런데
C는 허용하지 않는데 왜 c++은 허용할까?

호출할 함수를 찾는 방법이 서로 다르기 때문이다.

c++ : "함수의 이름","매개변수의 선언"
"두 개의 int형 정수를 인자로 전달받을 수 있는 myFunc라는 함수를 찾아야겠군!"

하지만 C는

C : "함수의 이름"
"myFunc ! myFunc 어딨어!!! "
와 같이 이름을 통해서만 찾는다.

때문에 씨에서는 불가능하고 씨플플에서는 가능한것이다.

함수 오버로딩의 예

함수 오버로딩이 가능하기 위해서는

"매개변수의 자료형 또는 개수가 달라야한다"

하지만 반환형이 다르다고 해서는 오버로딩이 가능하지 않다!

그 이유는 위에서 오버로딩이 가능한 이유를 설명했듯, c++는 함수를 활용할때 매개변수,함수의 이름 만을 이용한다!!!!

그럼 간단한 함수 오버로딩 예제를 보자.

#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<<"void MyFunc(int a,int b) called"<<std::endl;
}

int main(void)
{
    MyFunc();
    MyFunc('A');
    MyFunc(12,23);
    return 0;
}

함수오버로딩은 이렇듯!!!
어려운 개념이 아니다!!

profile
Carnegie Mellon University Robotics Institute | Research Associate | Developing For Our Lives, 세상에 기여하는 삶을 살고자 개발하고 있습니다

0개의 댓글