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만 있는 함수인지가 모호해직 된다

이로써 함수 중복과 디폴트 매개 변수에 대해 알아보았다

이 두개를 적절히 쓰면 코드를 간소화 하는데 도움이 많이 된다

업데이트: