반응형
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함수 호출시 무얼 받아야될지 모르게 되어 컴파일 에러가 난다.

반응형