C++ 에서 "다중 정의"는 하나(함수 이름, 변수 이름) 에 여러 의미를 동시에 갖는 것입니다.

영어로 "Overloading" [오버로딩] 라고 합니다.


C에서 이름이 같은 함수는 쓰면 않됩니다. C++에서는 매개변수 구성이 달라지거나 함수 원형이 달라지면

이름이 같더라도 다른 함수가 됩니다.


C++는 함수의 "다형성" 을 지원합니다.


예제 1) 다중 정의 일반



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
#include "stdafx.h"
#include <iostream>
 
int Add(int a, int b, int c)
{  
    std::cout << "Add(int, int, int); ";    
    return a + b + c;
 
}
 
int Add(int a, int b)
{    
    std::cout << "Add(int, int); ";    
    return a + b;
 
}
 
double Add(double a, double b)
{    
    std::cout << "Add(double , double) ";    
    return a + b;
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{    
    std::cout << Add(34<< std::endl;    
    std::cout << Add(345<< std::endl;    
    std::cout << Add(3.34.4<< std::endl;    
 
    return 0;
 
}
 
cs


자료형에 따라 연산 결과가 나오게 됨을 알 수 있습니다.  어려운 내용이 아니므로 넘어갑니다.


예제 2) C Style  함수 원형


*함수 원형 구성


반환형식 호출규칙 함수이름(매개변수, 매개변수, *** );


1
2
3
4
5
6
7
8
9
10
11
12
13
14

#
include
 "stdafx.h"
#include <iostream>
 
int Add(int a, int b);    
double Add(double a, double b);
 
int _tmain(int argc, _TCHAR* argv
{
   Add(34);    
   Add(3.34.4);    
   
   return 0;
 
}
cs


컴파일 하면 어떻게 될까요? 




링크에러네요.  이유가 뭘까요??  같은 함수 지만 반환 값이 다르죠..


여기서 Add함수는 예명입니다. 본명은 파란 부분입니다.

컴파일러에서는 이름이 중복되니깐 에러로 보는 겁니다.


C++에서 int __cdecl Add(int,int) 함수의 이름이  (?Add@@YAHHH@Z) 바뀝니다.

double __cdecl Add(double,double)  (?Add@@YANNN@Z)

이런 것을 name mangling 입니다. 


C++  컴파일러가 로 바꿉니다.  C언어 처럼 중복이 없는 거죠.


위의 예제를 C 언어로 바꿀려면 이렇게 할 수 있습니다.


컴파일 할 때 문제가 생깁니다. 

오류    C2733    'Add': 오버로드된 함수의 두 번째 C 링크는 허용되지 않습니다.    


C언어는 변수 이름을 중복해서 쓰지 않습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <iostream>
 
extern "C"
{
  int Add(int a, int b);    
  double Add(double a, double b);
 
}
 
int _tmain(int argc, _TCHAR* argv
{
   Add(34);    
   Add(3.34.4);    
   
   return 0;
 
}
cs




저작자 표시
신고

'Study > light_C++' 카테고리의 다른 글

ch2-4 함수 다중 정의  (0) 2016.09.07
ch2-3 함수 템플릿  (0) 2016.09.07
New 와 delete 연산자  (0) 2016.07.24
자료형  (0) 2016.07.24
Chap 2. C++ 함수와 네임스페이스  (0) 2016.06.27

WRITTEN BY
Profile
비타오백
Enjoy your stage!

받은 트랙백이 없고 , 댓글이 없습니다.
secret