[C++] 1-3. 매개변수의 디폴트 값

2024. 9. 8. 16:50·공부/C++
728x90

*윤성우의 열혈 C++ 프로그래밍 교재로 학습하며 정리하였습니다.

매개변수의 디폴트 값

 

C++의 함수에는 매개변수에 '디폴트 값'을 설정할 수 있다.

int MyFuncOne(int num = 7){
	return num + 1;
}

int MyFuncTwo(int num1 = 5, int num2 = 7){
	return num1 + num2;
}

int main(){
	MyFuncOne(); //7이 전달된 것으로 간주한다.
    MyFuncOne(7);
    
    MyFuncTwo();//num1에 5가, num2에 7이 전달된 것으로 간주한다.
    MyFuncTwo(5, 7);
}

디폴트 값을 설정해 두면 함수 호출 시 인자를 전달하지 않을 시 디폴트값이 전달된 것으로 간주하게 된다.

 

예제

1. 함수의 원형을 별도로 선언하지 않는 경우

#include <iostream>

int Adder(int num1 = 1, int num2 = 2) {
	return num1 + num2;
}

int main(void) {
	std::cout << Adder() << std::endl; //num1, num2 모두 디폴트값
	std::cout << Adder(5) << std::endl; //num1 = 5, num2는 디폴트값
	std::cout << Adder(3, 5) << std::endl; //num1 = 3, num2 = 5
	return 0;
}

2. 함수의 원형을 별도로 선언하는 경우

#include <iostream>

int Adder(int num1 = 1, int num2 = 2);
//함수의 원형을 별도로 선언하는 경우, 매개변수의 디폴트 값은
//함수의 원형 선언에만 위치시켜야 한다.

int main(void) {
	std::cout << Adder() << std::endl;
	std::cout << Adder(5) << std::endl;
	std::cout << Adder(3, 5) << std::endl;
	return 0;
}

int Adder(int num1, int num2) {
	return num1 + num2;
}

부분적 디폴트 값 설정

함수의 모든 매개변수에 디폴트 값을 지정할 수도 있지만, 일부 매개변수의 디폴트 값만 지정할 수도 있다.

그러나, 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야한다.

왜냐하면 함수에 전달되는 인자가 왼쪽에서부터 오른쪽으로 채워지기 때문이다.

int YourFunc(int num1, int num2. int num3 = 30){ } //O
int YourFunc(int num1, int num2 = 20. int num3 = 30){ } //O
int YourFunc(int num1 = 10, int num2 = 20. int num3 = 30){ } //O

int YourFunc(int num1 = 10, int num2. int num3){ } //X
int YourFunc(int num1 = 10, int num2 = 20. int num3){ } //X
// 오른쪽 매개변수의 디폴트 값을 비우는 형태는 불가능하다.

예제 1

#include <iostream>
int BoxVolume(int length, int width = 1, int height = 1);

int main(void) {
	std::cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << std::endl;
	std::cout << "[5, 5, D] : " << BoxVolume(5, 5) << std::endl;
	std::cout << "[7, D, D] : " << BoxVolume(7) << std::endl;
	// std::cout << "[D, D, D] : " << BoxVolume() << std::endl; // 컴파일 에러
}

int BoxVolume(int length, int width, int height) {
	return length * width * height;
}

예제 2

int SimpleFunc(int a = 10) {
	return a + 1;
}
int SimpleFunc(void) {
	return 10;
}

// SimpleFunc()와 같이 인자를 전달하지 않으면서 함수를 호출하는 경우,
// 두 함수 모두 호출 조건을 만족하기 때문에 컴파일 에러가 발생한다.

 

728x90

'공부 > C++' 카테고리의 다른 글

[C++] 2-1. C언어 복습  (0) 2024.09.11
[C++] 1-5. 이름 공간  (0) 2024.09.09
[C++] 1-4. 인라인(inline) 함수  (0) 2024.09.08
[C++] 1-2. 함수 오버로딩  (1) 2024.09.08
[C++] 1-1. 입력과 출력  (0) 2024.09.05
'공부/C++' 카테고리의 다른 글
  • [C++] 1-5. 이름 공간
  • [C++] 1-4. 인라인(inline) 함수
  • [C++] 1-2. 함수 오버로딩
  • [C++] 1-1. 입력과 출력
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (143)
      • Unity 개발일지 (20)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (118)
        • 게임 수학 (1)
        • 부트캠프 (12)
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (38)
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    Python
    앱테크
    Cpp
    백준
    unity2d
    티스토리챌린지
    til
    구간합
    백준 #python
    오블완
    패널파워
    자료구조
    머니워크
    비트버니
    C++
    c#
    unity
    캐시워크
    야핏무브
    멋쟁이사자처럼후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[C++] 1-3. 매개변수의 디폴트 값
상단으로

티스토리툴바