상태이상 : 호기심 중독

이것저것 알아두면 언젠간 도움이 된다.

코딩/C++

디폴트(default) 매개변수 [c++]

IT코코아 2018. 3. 6. 09:00

한국어로 하면? 태만매개변수!
구글에 default를 치면 태만,체납하다 등등의 번역결과를 보여줍니다. 저는 지금까지 그냥 "기본설정"으로만 알고있었는데 기본설정은 it분야에서 흔하게 쓰는 용어였네요...ㅋㅋ

default 매개변수는 함수를 호출할 때 매개변수를 넘겨 주지 않으면 프로그래머가 정해준 값이 매개변수를 대신하여 함수가 실행되도록 하는 기능입니다.
이번에도 가벼운 예제를 통해 사용방법을 익혀봅시다.

#include <iostream>
using namespace std;

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

int main() {
    cout << add() << endl;
    cout << add(10) << endl;
    return 0;
}

함수를 정의할 때 매개변수를 미리 프로그래머가 초기화 하는 형태로 코딩합니다.
main함수를 살펴보면 add함수를 호출할 때, 매개변수를 한 개도 넘겨주지 않은 것과 한 개만 넘겨준 형태로 코딩을 했습니다. 원래 같으면 함수가 정의된 매개변수의 수를 충족하지 않은 상태에서 함수를 호출하려 하면 에러가 나는 것이 정상이죠.. 하지만 우리는 디폴트매개변수를 사용했습니다.

결과는 0과 10!
add()는 매개변수를 아무것도 주지않아 a = 0, b = 0으로 우리가 정의부분에 미리 설정해둔대로 실행됬고
add(10)은 10하나만 넘겨준 형태로 a=10이되고 b는 넘겨 받지 못해 우리가 설정한 0이 저장되어 실행된 모습입니다.

다음은 헤더파일에 함수를 선언하고 다른cpp파일에 정의를 하여 main에 사용 할 경우 입니다.

#pragma once
int add(int a, int b);

헤더파일에 위처럼 함수를 선언만 해두고

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

헤더파일과 같은이름의 cpp파일에 정의를 한 다음

#include <iostream>
#include "기본매개변수.h"
using namespace std;

int main() {
    cout << add() << endl;
    cout << add(10) << endl;
    cout << add(10, 20) << endl;
    return 0;
}

main함수가 있는 cpp파일에 전처리 시켜 함수를 사용하려하면 add(), add(10)은 빨간 밑줄이 쳐지며 에러납니다. "당연히 함수 정의 부분에 default매개변수를 안 해뒀으니까 그런게 아니냐" 해서 정의 부분을

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

위와 같이 바꾸어도 그대로 에러입니다...

함수를 헤더파일에 정의하고 헤더파일명.cpp에 정의를 내려 default매개변수를 사용할 경우 default 매개변수 설정은 헤더파일에 함수를 선언한 곳에 해주어야 합니다. 헤더파일의 선언부분을

#pragma once
int add(int a=0, int b=0 );

이 처럼 수정하면 정상적으로 실행이 됩니다. 이 점 주의하며 사용하시면 되겠습니다.


정리.

default매개변수 : 함수를 호출할 때, 함수가 정의된 매개변수의 수 만큼 값을 전달해 주지 않아도 프로그래머가 미리 설정한 값이 변수에 저장되어 함수 실행에는 문제가 없도록 하는 기능.

주의점.
1. main.cpp이나 헤더파일에 함수를 선언 및 정의해서 사용할 때는 아래와 같이 사용.

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

2. 헤더파일에 선언하고, 헤더파일명.cpp에 정의를 따로 하여 사용할 경우.
헤더파일에서 선언부분에다가 default매개변수를 설정한다.

#pragma once
int add(int a=0, int b=0 );
반응형

'코딩 > C++' 카테고리의 다른 글

함수의 오버로딩 [c++]  (0) 2018.03.05
namespace? [c++]  (0) 2018.03.04
입출력을 해보자! [c++]  (0) 2018.03.03