개발 Study

#12. 함수 오버로딩 및 디폴트 매개변수

HYuk 2021. 4. 7. 23:23
728x90

# 함수 오버로딩

함수를 만들때 반환타입과 매개변수를 정하여 만들어 준다.

이때 같은 기능을 하는 함수이지만, 매개변수의 타입이나 매개변수의 갯수가 달라질 때마다 매번 함수를 만들면

함수의 이름이 제각각이 되어 구분하기 힘들어진다.

그때 오버로딩을 쓰면된다.

 

예를들어, 더하기 함수 add가 있는데,

변수 두개를 받아서 더해주는 함수

int add(int a, int b)

{

return a+b;

}

가 있다고 하자

근데 변수 세개를 받아서 더해주고 싶은데, 저 함수를 만들 때 매개변수를 int a, int b로 했기 때문에 불가능하다.

그렇다고 함수 int add2(int a, int b, int c) 를 만들자니 add와 add2의 구분이 어려워진다.

 

오버로딩은 같은 이름으로 그 함수를 정의 할 수 있다.

 

#include <iostream>

using namespace std;

int add(int a, int b)
{
	return a + b;
}

int add(int a, int b, int c)
{
	return a + b + c;
}

int main()
{
	cout << add(1, 2) << endl;
	cout << add(1, 2, 3) << endl;
}

이런식으로 같은 add 이름은 가진 함수 이지만 매개변수를 바꾸어 만들어 줄 수 있다.

 

매개변수의 갯수 및 타입을 다르게 해서 같은 이름의 함수를 만들 수 있다.

 

주의!

int add(int a, int b)

int add(double a, double b)

는 가능 하나

 

int add(int a, int b)

double add(int a, int b)

와 같이 반환 타입에 따른 오버로딩은 불가능 하다.

 

# 디폴트 매개변수

함수를 사용할때 일반적으로 선언된 매개변수 갯수만큼 채워서 사용해야 하지만

디폴트 값을 정해줌으로써, 쓰지 않은 변수에 대해서는 디폴트값이 자동으로 들어가게 할 수 있다.

 

#include <iostream>

using namespace std;

int add(int a, int b, int c = 0, int d = 0, int e = 0) // c,d,e의 값이 비어 있을 경우 0 자동삽입
{
	return a + b + c + d + e;
}

int main()
{
	cout << add(1, 2) << endl;
	cout << add(1, 2, 3) << endl;
}

 

위의 코드와 같이 add 함수를 사용 할때 add(1,2)만 해도 나머지 값들은 0으로 자동처리되어 사용된다.

728x90

'개발 Study' 카테고리의 다른 글

#14. 포인터 (2) 및 배열  (0) 2021.04.10
#13. 포인터  (1) 2021.04.08
#11. 지역변수, 전역변수 및 메모리구조 (2)  (1) 2021.04.07
#10. 함수 및 메모리 구조  (0) 2021.04.06
#9. do while문, for문 (반복문)  (0) 2021.04.05