반응형
개요
함수 오버로딩(Function overlaoding) : C#, C++, 자바 등에서의 함수의 특징.
같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다.
조건
다음 중 하나를 만족해야 한다.
1. 매개변수의 자료형이 달라야 한다.
2. 매개변수의 개수가 달라야 한다.
주의점
1. 반환타입은 오버로딩에서 고려되지 않는다.
2. 모호한 함수가 있을 경우 컴파일 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <iostream>
using namespace std;
void print(unsigned int value) {
cout << 1;
}
void print(float value) {
cout << 2;
}
void print(char value) {
cout << 3;
}
int main() {
print('a'); // 3 출력
print(0); // 컴파일 에러
}
|
cs |
위 코드에서 print('a')는 char 타입으로 정확하게 일치하는 print가 있기 때문에 문제없이 3을 출력한다.
하지만 print(0)은 int 타입인데, int 타입으로 오버로딩된 함수가 없다.
따라서 표준 변환 과정을 거치는데, float와 unsigned int, char 모두 변환할 수 있기 때문에 모호한 일치가 생겨 컴파일 에러가 발생한다.
해결 방법으로는 호출하려고 하는 타입을 매개 변수로 가지는 함수를 새로 만들어주거나
모호한 인수를 호출할 함수 타입으로 명시적 변환하면 된다.
참조
반응형