[C++] 문제 01 - 3 [매개변수의 디폴트값]

2023. 3. 13. 18:21Chlln's Code/C++

문제 1

예제 DefaultValue3에 정의된 함수 BoxVolume을 '매개변수의 디폴트값 지정' 형태가 아닌, '함수 오버로딩'의 형태로 재구현해보자.

물론 main 함수는 변경하지 않아야 하며, 실행 결과도 동일해야 한다.

 

q01-3-1.cpp

#include <iostream>
using namespace std;

int BoxVolume(int length, int width, int height);
int BoxVolume(int length, int width);
int BoxVolume(int length);

int main(void) {
	cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << endl
		<< "[5, 5, D] : " << BoxVolume(5, 5) << endl
		<< "[7, D, D] : " << BoxVolume(7) << endl;
	//cout << "[D, D, D] : " << BoxVolume() << endl;

	return 0;
}

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

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

int BoxVolume(int length) {
	return length;
}

출력 결과

[3, 3, 3] : 27
[5, 5, D] : 25
[7, D, D] : 7

문제 2

다음과 같은 형태로의 함수 오버로딩은 문제가 있다. 어떠한 문제가 있는지 설명해보자.

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

int SimpleFunc(void) {
	return 10;
}

 

함수를 SimpleFunc()의 형식으로 호출하려고 할 때,
위의 SimpleFunc(int a = 10)처럼 디폴트값을 가진 함수를 호출하려는 것인지
아래의 SimpleFunc(void)처럼 매개변수를 갖고 있지 않은 함수를 호출하려는 것인지 매우 모호함.