티스토리 친구하기

본문 바로가기

Robotics/C++

C++ 함수 오버로딩 (overloading)

728x90

- 함수 이름은 같고 매개변수가 다름

- 매개변수가 다르기 때문에 다른 함수로 인식

- 하지만 반환형이 다르다고 해서 다른 함수로 인식하지 않음

 

void Person(int age);			// 문제없음 
void Person(char * name, int age);	// 문제없음
void Person(float weight, int age);	// 문제없음
int Person(int age);			// void Person(int age)과 반환형이 다르지만 
					// 매개변수의 종류가 같음 -> 컴파일 에러
int Person(float weight);		// 문제없음

 

<어떤 함수를 호출해야 하는지 판단하는 과정>

 

1. 가장 적합한 함수 --> 좋음

 

2. 형변환 (하지만 컴파일 경고가 나올 수 있음 - 형변환해서 일치하는 함수 찾았는데, 진짜 네가 원하는게 맞니??)

 

2-1. 정확하기 일치하는 타입이 없다면 아래와 같이 형변환하여 일치하는 함수 찾음

 - Char, unsigned char, short --> int

 - Unsigned short --> int

 - Float --> double

 - Enum --> int

 

2-2. 그래도 없으면 포괄적인 형변환

 - 다른 숫자 타입으로 변환 (예 float --> int)

 - Enum --> int

 - 포인터 --> void 포인터

 

3. 매칭되는 함수를 찾을 수 없는 경우 --> 컴파일 에러

 

4. 매칭되는 함수를 여러 개 찾는 경우 --> 컴파일 에러

 

(1) void Print(int x);
(2) void Print(int x, int y);
(3) void Print(float x, const char * name);

 

Print(10);		// (1)
Print(10, 20);		// (2)
Print(71.9f, "Sam");	// (3)
Print("Sam", 71.9f);	// 컴파일 에러
Print(71.9f);		// (1), 단 컴파일 경고가 나올 수 있음

 

 

 

반응형