언어

함수 오버로딩 (Function overloading)

겜도리도리 2021. 9. 26. 03:54
반응형

개요

함수 오버로딩(Function overlaoding) : C#, C++, 자바 등에서의 함수의 특징.

같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다.

조건

다음 중 하나를 만족해야 한다.

1. 매개변수의 자료형이 달라야 한다.

int, float를 각각 자료형으로 받는 fun 함수

2. 매개변수의 개수가 달라야 한다.

각각 int 자료형이 1개, int 자료형이 2개인 fun 함수

주의점

1. 반환타입은 오버로딩에서 고려되지 않는다.

fun1함수는 반환형만 다르기 때문에 오버로딩할 수 없다.

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 모두 변환할 수 있기 때문에 모호한 일치가 생겨 컴파일 에러가 발생한다.

해결 방법으로는 호출하려고 하는 타입을 매개 변수로 가지는 함수를 새로 만들어주거나

모호한 인수를 호출할 함수 타입으로 명시적 변환하면 된다.

참조

https://boycoding.tistory.com/221

 

C++ 08.07 - 함수 오버로딩 (Function overloading)

함수 오버로딩 (Function overloading) 함수 오버로딩(function overloading)은 다른 매개 변수를 가진 같은 이름의 여러 함수를 만들 수 있는 C++의 기능이다. 다음 함수를 보자. int add(int x, int y) { return..

boycoding.tistory.com

반응형