C컴파일러와, C++컴파일러가 호출하고자 하는 함수를 찾을때 참조하는 정보가 다르기 때문이다!!
* C 컴파일러 ( 함수 오버로딩 x )
함수의 이름
C컴파일러는 호출하고자 하는 함수를 찾을 때 오로지 함수의 이름 정보만을 갖고 찾기 때문에 정의된 매개 변수의 형태가 달라도 동일한 이름의 함수 정의는 허용하지 않는다.
#overC.c
1 #include <stdio.h>
2
3 int function(void)
4 {
5 return 0;
6 }
7 int function(int a, int b)
8 {
9 return a+b;
10 }
11
12 int main()
13 {
14 function();
15 function(1,2);
16 return 0;
17 }
$ gcc overC.c
overC.c:7: error: conflicting types for ‘function’
overC.c:3: note: previous definition of ‘function’ was here
overC.c: In function ‘main’:
overC.c:14: error: too few arguments to function ‘function’
* C++ 컴파일러 ( 함수 오버로딩O)
함수의 이름 + 매개 변수의 정보
C++컴파일러는 호출하고자 하는 함수를 찾을 때 함수의 이름뿐만 아니라 매개 변수의 정보까지도 참조를 한다.
즉 C++은 이름이 같고 매개 변수의 타입 혹은 개수가 다른 함수들의 정의를 허용한다.
=> 이를 함수 오버로딩이라고 한다!
#include <iostream>
int function(void)
{
return 0;
}
int function(int a, int b)
{
return a+b;
}
int main()
{
function();
function(1,2);
return 0;
}
$ g++ -o overCPP overCPP.cpp
문제없이 동작한다.
출처 : 열혈강의 C++프로그래밍(윤성우저) 참고
'Language > C++' 카테고리의 다른 글
[c++] 항상 헷갈리는 const 위치에 따른 쓰임새 차이 (const char , char const) (0) | 2015.02.17 |
---|---|
c++ literal class (c++11) (0) | 2015.02.13 |
[c++] 전역함수에 대한 friend선언 (0) | 2014.06.20 |
[c++] 함수선언 뒤 const (0) | 2014.06.20 |
[c++] 레퍼런스, reference, int &ref = val; 레퍼런스 변수, 별명! (0) | 2014.06.17 |