C++ 8.함수 중복,디폴트 매개 변수
title: “C++ 8.함수 중복,디폴트 매개 변수” categories:
-
CspecialCharspecialChar
#C++ 8.함수 중복,디폴트 매개 변수 : 네이버 블로그
c++에서는 c언어와 달리 같은 이름의 함수를 여러 개 만들 수 있다.
이것을 함수 중복이라고 한다
함수 중복을 하기 위해서는 함수들의 이름이 같아야 하고 변수 타입이나 변수의 개수가 달라야 한다
함수의 리턴 타입은 고려하지 않는다
즉 함수의 입력 변수만 다르면 이름이 같아도 다른 함수로 인식됩니다
즉
int sum(void);
int sum(int a);
int sum(int a,int b);
int sum(int a,char b);
는 다 다른 함수가 됩니다
하지만 리턴만 다르면 같은 함수로 인식합니다
int sum(int a,int b);
double sum(int a,int b);
(위 두개는 오류!)
c++의 생성자 함수도 함수이기 때문에 함수 중복이 가능하다
즉
class Circle{
public:
Circle();
Circle(int a);
}
위 코드에서 객체를 생성하는 생성자 함수 Circle()과 CIrcle(int a)는 서로 다른 함수가 된다
주의할 점은 매개 변수가 모호하지 않아야 한다
예시로
int sum(int a,int b);
int sum(int a,double b);
를 하고 sum(3,5);
를 선언하게 되면 5는 double도 가능하므로 모호해지게 된다
또 매개 변수를 받을 때 포인터 타입으로 받게 되면 함수는 그 변수가 포인터를 인지 일반 변수인지 모르기 때문에 모호해지게 된다
참고로 소멸자는 매개 변수를 가지지 않기 때문에 하나만 존재한다
함수는 또 디폴트 매개 변수를 사용할 수 있다
디폴트 매개 변수란 함수를 호출 할 때 매개 변수에 값이 없다면 미리 선언된 변수를 매개 변수로 사용하는 것이다
즉
int sum(int a);이란 함수가 있다 하자
여기에
int sum(int a=0);이라고 디폴트 매개 변수를 선언한다
이제 함수를 선언할 때 매개 변수가 있다면 그 값이 a가 되겠지만 매개 변수가 없는 경우 a=0으로 함수가 선언된다
디폴트 매개 변수를 사용할 때 가장 주의해야 할 점은
디폴트 매개 변수는 무조건 끝쪽에 몰려 있어야 한다
즉 int sum(int a,int b,int c)라는 함수가 있다고 하자
매개변수를 a=10으로
즉 int sum(int a=10,int b,int c)이란 함수로 바꾸고
sum(5,5)를 하게 되면 a=10,b=5,c=5가 되게 된다
문제는 가운데 매개 변수가 들어가게되면
즉 int sum(int a,int b=10,int c)
sum(5,5)를 했을 때 a에 5가, b에 5가 들어가고 c에는 값이 없어 오류가 나게 된다
디폴트 매개 변수로 생략을 할 때는 무조건 끝에 몰려 써져야 한다
또 디폴트 매개 변수를 사용할 때는 함수 중복과 모호하지 않은지를 확인해야 한다
int sum(int a,int b=10)
int sum(int a);
이 있고
int sum(5);
라는 함수가 선언되게 되면
sum(5)가 b가 생략된 함수인지 함수 증복으로 a만 있는 함수인지가 모호해직 된다
이로써 함수 중복과 디폴트 매개 변수에 대해 알아보았다
이 두개를 적절히 쓰면 코드를 간소화 하는데 도움이 많이 된다