◆ 무한한 가능성/& Visual C/C++

[펌글] C++ C와의 차이점 - 함수의 오버로딩, default 연산자

치로로 2009. 1. 12. 00:17

출처 마지막 기회 | 거북이
원문 http://blog.naver.com/potato1291/120042257415

 

C++이 C와 다른점을 설명하고 있는데요


이번에는 함수의 오버로딩입니다.


C에서는 메인함수에서 함수호출을 할때


동일한 함수명이 존재하면 컴파일 에러가 발생하게 됩니다. (다들 아는내용이죠?)


예를 들자면 이런겁니다.


--------------------------------------------------------------------------

void function()

{

           printf(" 11111 ");

}

void function()

{

           printf(" 22222 ");

}

void main(void)

{

            function();  // 어떤 함수를 호출해야 할지 모른다. -_- 같은 함수가 2개 있어서;;

}


--------------------------------------------------------------------------



하지만 C++에서는 이것을 절묘하게 지원하는 문법이 존재하는데


이것은 함수의 오버로딩이라고 한다. ( 스타크래프트의 오버로드...가 생각나네요 )


일단 먼저 소스를 보도록 하죠


-----------------------------------------------------------------------------------


void sum(int a=1)

{

               cout<< "안녕" << endl;

}

void sum(int a, int b)

{

               cout<< "hello" << endl;              

}

void main(void)

{

               sum(1);

               sum(2,3);

}


-----------------------------------------------------------------------------------


위 함수를 보면 sum함수가 2개 존재하죠?


C에서는 당연히 컴파일 에러가 발생하지만, C++에서는 컴파일 에러가 나지 않습니다.


함수를 자세히 보면 함수명은 같지만, 인자가 다르죠 ?


솔직히 사람이 생각했을때 sum(1), sum(1,2) 호출하면 각각


어떤함수가 호출이 되어야 할지 알수 있겠죠 ? 바로 그겁니다. 사람이 생각하는 그대로에요


첫번째 sum(1) 은 sum(int a) 가 호출되고


두번째 sum(1,2)는 sum(int a, int b)가 호출이 되는겁니다


따라서 결과는

------------

안녕

hello

------------


라고 출력이 되겠죠.


이때 첫번째 sum(int a=1) 부분을 보면, a 변수에 1이 입력이 되었다는것을 알수 있는데요


이것은 default 연산자라고 합니다.


만약에 아무 인자가 넘어오지 않았다면, a에는 1을 대입하라는것이죠.


( 당연히 인자값이 넘어가면 넘어간 인자가 a에 대입됩니다. )


쉽죠 ??