1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int function(void) { return 10; } int function(int a,int b) { return a+b; } int main(void) { function(); function(12,13); return 0; } | Crocus |
c언어에선 함수 이름이 중복이기에 에러가 난다.
c에서는 함수의 이름만으로 가지고 판단하기에 에러가 난다.
c++에서는 이름 + 매개변수에 대한 정보 모두 판단한다.
즉, c++에서는 함수이름과 매개변수의 타입을 함께 보고 호출될 함수를 찾기 때문에 매개변수의 개수나 타입이
다르면 같은 이름의 함수들이 공존 할 수 있다.
*********************함수 오버로딩************************
* *
*동일한 이름의 함수를 중복해서 정의하는 것. *
* *
* **함수 오버로딩 조건 ** *
* *
*매개 변수의 개수 혹은 타입이 일치하지 않아야 함. *
* *
* **함수 오버로딩이 가능한 이유 ** *
* *
*호출할 함수를 매개 변수의 정보까지 참조해서 호출 *
* *
*즉, 함수 이름 + 매개 변수 정보 참조 *
*******************************************************
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <iostream.h> void function(void) { std::cout<<"function(void) call"<<std::endl; } void function(char c) { std::cout<<"function(char c) call"<<std::endl; } void function(int a, int b) { std::cout<<"function(int a, int b) call"<<std::endl; } // 이 세가지 함수는 함수 오버로딩 관계이다. // 같은 함수 이름이지만 매개 변수를 달리 하고 있기에 오버로딩이 가능하다. int main(void) { function(); function('a'); function(12,13); return 0; } | Crocus |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void func(void) { ... } int func(void) { ... } | Crocus |
이 둘은 오버로딩 관계가 아니다.
함수 오버로딩은 리턴 타입은 구별해주지 못한다.
즉, void와 int 타입에서 둘다 void로 아무 인자를 받아내지 못한다면
프로그램은 func함수 호출시 무얼 받아야될지 모르게 되어 컴파일 에러가 난다.
'Basic > C++' 카테고리의 다른 글
c++ 인-라인(inline) 함수 (0) | 2015.03.07 |
---|---|
c++ 디폴트 매개변수 (0) | 2015.03.07 |
c++ 입력 및 출력, bool타입, 레퍼런스 (0) | 2015.03.07 |
MIDI 함수를 이용한 Console에서 피아노 연주 - (3) July - My Soul (0) | 2014.09.06 |
Mouse Macro - 마우스 자동제어 (25) | 2014.03.09 |