728x90
반응형
함수 오버로딩
C언어에서는 이름이 동일한 함수의 선언을 허용하지 않는다.
그러나 C++에서는 함수의 이름이 같더라도 선언된 매개변수의 자료형이 다르면 함수의 선언을 허용하고 있다.
C++에서는 함수를 호출할 때 함수의 이름과 매개변수의 선언을 모두 확인하기 때문이다.
따라서 아래 코드와 같은 함수의 선언이 가능하다.
#include <iostream>
int func(int a)
{
return a;
}
int func(int a, int b)
{
return a + b;
}
int func(int a, int b, int c)
{
return a + b + c;
}
int main()
{
std::cout << func(10) << std::endl;
std::cout << func(10, 20) << std::endl;
std::cout << func(10, 20, 30) << std::endl;
return 0;
}
매개변수의 종류가 수가 같더라도 선언된 순서가 다르면 이 또한 오버로딩이 가능하다.
따라서 아래 코드와 같은 함수의 선언도 가능하다.
#include <iostream>
float func(int a, float b)
{
return a + b;
}
float func(float c, int d)
{
return c * d;
}
int main()
{
std::cout << func(10, 20.5) << std::endl;
std::cout << func(10.5, 20) << std::endl;
return 0;
}
잘못된 예시
함수의 반환형은 컴파일러가 함수호출 시 함수를 구분하는 기준이 아니다.
따라서 다음과 같은 코드는 오류가 발생한다.
#include <iostream>
float func(int a, float b)
{
return a + b;
}
double func(int c, float d)
{
return c * d;
}
int main()
{
std::cout << func(10, 20.5) << std::endl;
std::cout << func(10, 25.5) << std::endl;
return 0;
}
728x90
반응형
'C++ > C++ 문법' 카테고리의 다른 글
[C++] 인라인 함수 (inline function) (0) | 2024.03.01 |
---|---|
[C++] 이름공간 (namespace) (0) | 2024.02.10 |
[C++] 디폴트 매개변수 (Default Value, Default Parameter) (0) | 2024.02.09 |
[C++] 지역변수 선언에 있어서 C언어와의 차이 (0) | 2024.01.31 |
[C++] 입출력 방식 (std::cout, std::cin) (0) | 2024.01.25 |