C & C++/디딤돌 C++

[C++] 6. 디폴트 매개 변수 7. 매개 변수 이름이 없는 스텁 매개 변수

언휴 2024. 4. 4. 15:48

 

[C++] 6. 디폴트 매개 변수

6. 디폴트 매개 변수

C++언어에서는 함수 입력 매개 변수 중에 디폴트 값을 설정할 수 있습니다. 이러한 디폴트 매개 변수는 대부분 같은 값을 전달할 때 호출하는 곳에서 인자를 전달하지 않아도 사용할 수 있게 해 줍니다.

만약 호의 면적을 구하는 함수에 반지름과 각도를 입력 매개 변수로 받게 하였을 때 각도의 디폴트 값을 2*PI로 설정한다고 가정할게요. 이와 같이 정의하면 호출할 때 반지름만 전달하면 각도는 디폴트 값을 사용하여 계산합니다. 물론 호출하는 곳에서 원하는 각도를 전달할 수도 있어요.

//디폴트 매개 변수
//Program.cpp
#include <iostream>
using namespace std;

double CalculateArea(double radius, double radian=2*3.14)
{
    return radius*radius*(radian/2);
}
 
int main()
{
    cout<<"반지름이 3인 원의 넓이:";
    cout<<CalculateArea(3)<<endl;
    cout<<"반지름이 3인 반원의 넓이:";
    cout<<CalculateArea(3,3.14)<<endl;
    return 0;
}

▷ 실행 결과

반지름이 3인 원의 넓이:28.26
반지름이 3인 반원의 넓이:14.13

 

7. 매개 변수 이름이 없는 스텁 매개 변수

C++에서 함수 중복 정의가 가능한 것은 이미 앞에서 다뤘어요.

C++에서는 입력 인자로 전달 받아야 할 형식 인자가 같은 두 개의 함수의 이름을 중복 정의할 수 없을 때 두 개의 함수를 구분하기 위한 목적으로 스텁 매개 변수를 정할 수 있어요. 스텁 매개 변수는 입력 매개 변수 형식은 결정하였지만 변수 이름이 없는 매개 변수예요. 단순히 호출하는 곳에서 어느 함수를 호출하는 것인지 구분하기 위한 목적으로 사용하는 것이예요.

예를 들어 사각형의 면적을 구하는 함수와 삼각형의 면적을 구하는 함수를 만든다고 가정해요. 이 때 두 개의 함수는 모두 두 개의 실수를 인자를 받으면 면적을 구할 수 있을 거예요. 하지만 중복 정의할 수 없겠죠. 이 때 두 함수 중에 하나의 함수는 스텁 매개 변수를 정의하면 함수 중복 정의할 수 있어요.

int CalculateArea(int width,int height)
{
    return width*height;
}

int CalculateArea(int width,int height,bool) //세 번째 인자를 스텁 매개 변수로 결정
{
    return width*height/2;
}

물론 호출하는 곳에서는 스텁 매개 변수에도 값을 전달해야 합니다. 그리고 스텁 매개 변수로 전달한 값은 단지 어느 함수를 호출하기 위한 것인지 판별하기 위한 것으로 실제 함수 내에서는 전달받은 값을 사용할 수는 없어요.

//스텁 매개 변수
//Program.cpp

#include <iostream>
using namespace std;

int CalculateArea(int width,int height)
{
    return width*height;
}
int CalculateArea(int width,int height,bool) //세 번째 인자를 스텁 매개 변수로 결정
{
    return width*height/2;
}
 
int main()
{
    cout<<"사각형 넓이:";
    cout<<CalculateArea(3,4)<<endl;
    cout<<"삼각형 넓이:";
    cout<<CalculateArea(3,4,false)<<endl;//스텁 매개 변수에 인자를 전달
    return 0;
}

▷ 실행 결과

사각형 넓이:12
삼각형 넓이:6