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에 대입됩니다. )
쉽죠 ??
[출처] C++ C와의 차이점 - 함수의 오버로딩, default 연산자|작성자 거북이
'◆ 무한한 가능성 > & Visual C/C++' 카테고리의 다른 글
[C/C++] Data Type Ranges (0) | 2009.01.12 |
---|---|
[펌글] [C/C++] enum, 보다 나은 enum (0) | 2009.01.12 |
[펌글] [Thread] Mutex - 동기화 (0) | 2009.01.12 |
[펌글] MFC(C++) 공부하시는 분을 위한 책 추천 (0) | 2009.01.12 |
[펌글] 프로그래밍 책 보는 순서 C/C++ (0) | 2009.01.12 |