반응형
디폴트 매개변수는 말 그대로 기본 매개변수를 의미합니다. 함수를 정의할 때 매개변수를 넣거나 안 넣으면 되지 왜 디폴트 매개변수가 필요할까요? 그러나 실제로 프로그래밍을 하다보면 항상 넣어줘야 하는 값 마저도 귀찮아 지는 날이 옵니다. 프로그래머는 아주 현명하고 게으른 사람들이 만드는 것이라고 교수님의 말씀이 생각납니다.
다음 예제를 살펴보겠습니다.
#include <iostream> using namespace std; class Chulsoo { public: int Eat(int SteakNum); }; int main(void) { Chulsoo chulsoo; chulsoo.Eat(); return 0; } int Chulsoo::Eat(int SteakNum) { cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl; return SteakNum; } | cs |
인자를 입력하지 않았떠니 오류만 반환하고 컴파일이 되지 않습니다. 디폴트 매개변수 값을 어딘가에 지정해야 한다는 것을 아시겠죠?
디폴트 매개변수를 지정하는 위치
디폴트 매개변수 값을 어디에 지정해야 하는지 다음 예제를 살펴봅시다.
#include <iostream> using namespace std; class Chulsoo { public: int Eat(int SteakNum); }; int main(void) { Chulsoo chulsoo; chulsoo.Eat(); return 0; } int Chulsoo::Eat(int SteakNum=20000) { cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl; return SteakNum; } | cs |
디폴트 매개 변수값을 함수 정의부에 지정했습니다. 결과는 오류가 발생합니다.
디폴트 매개변수 값을 함수 정의부에 지정한다면 컴파일러는 디폴트 매개변수가 얼마인지 모릅니다. 따라서 함수의 선언부에 지정해줘야 합니다. 그렇다면 다음 코드를 보도록 하겠습니다.
#include <iostream> using namespace std; class Chulsoo { public: int Eat(int SteakNum=20000); // 디폴트 매개변수 값 지정 }; int main(void) { Chulsoo chulsoo; chulsoo.Eat(); return 0; } int Chulsoo::Eat(int SteakNum) { cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl; return SteakNum; } | cs |
7행에서 디폴트 매개변수 값을 함수의 선언부에 지정합니다. 결과를 살펴보면 함수를 호출할 때 특별한 인자 값이 함수를 호출해도 철수가 스테이크를 먹는다고 표현됩니다.
디폴트 매개 변수를 여러 개 사용하기
여러개의 디폴트 매개 변수를 사용해 보겠습니다.
#include <iostream> using namespace std; class Chulsoo { public: int Eat(int SteakNum = 20000, int WaterNum = 1000, int CoffeeNum = 5000); }; int main(void) { Chulsoo chulsoo; chulsoo.Eat(); // 20,000원 짜리 스테이크, 1,000원 짜리 물, 5,000원 짜리 커피를 먹는다. chulsoo.Eat(30000); // 30,000원 짜리 스테이크를 먹는다. chulsoo.Eat(1500); // 1,500원 짜리 물을 먹는다(?) chulsoo.Eat(20000, 1500); // 1,500원 짜리 물을 먹는다. return 0; } int Chulsoo::Eat(int SteakNum, int WaterNum, int CoffeeNum) { cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹고, "; cout << WaterNum << "원 짜리 물을 먹고, "; cout << CoffeeNum << "원 짜리 커피를 먹는다." << endl; return SteakNum; } | cs |
디폴트 매개변수를 여러 개 사용하는 함수 호출에서 디폴트로 지정한 값이 아닌 다른 값을 전달하려면, 다른 값을 지정하고픈 디폴트 매개변수 값 앞에 있는 값들도 지정해야 합니다.
반응형
'SW > C++' 카테고리의 다른 글
C++11 : 인라인 함수에 대해 알아볼까요? (개념 및 예제) (0) | 2019.01.01 |
---|---|
C++11 : 함수 오버로딩에 대해 알아볼까요? (개념 및 예제) (2) | 2018.12.31 |
C++11 : 값에 의한 호출과 참조에 의한 호출에 대해 알아볼까요? (0) | 2018.12.29 |
C++11 : 값, 참조에 의한 호출에 대해 알아볼까요? (0) | 2018.12.27 |
C++11 : 함수를 이해해 볼까요? (0) | 2018.12.27 |