본문 바로가기

C++/C++ 문법

[C++] 함수 오버로딩

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
반응형