
문제 1
예제 DefaultValue3.cpp에 정의된 함수 BoxVolume를 '매개변수의 디폴트 값 지정' 형태가 아닌, '함수 오버로딩'의 형태로 재 구현해보자. 물론 main함수는 변경하지 않아야 하며, 실행결과도 동일해야 한다.
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<<"[5, D, D] : "<<BoxVolume(5)<<std::endl;
return 0;
}
[3, 3, 3] : 27
[5, 5, D] : 25
[5, D, D] : 5
위의 메인함수를 건들지 않고 같은 실행결과를 도출해내면 된다. 함수 오버로딩의 형태로 구현하기 위해서는 각 호출하는 함수의 인자의 갯수로 함수를 구분지으면 되는 것이다!
인자 3개, 인자 2개, 인자 1개를 각각 받는 함수를 오버로딩하면 된다.
#include <iostream>
int BoxVolume (int length, int width, int height) {
return length*width*height;
}
int BoxVolume (int length, int width) {
return length*width*1;
}
int BoxVolume (int length) {
return length*1*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<<"[5, D, D] : "<<BoxVolume(5)<<std::endl;
//std::cout<<"[D, D, D] : "<<BoxVolume()<<std::endl;
return 0;
}
나는 교재의 답안과 약간은 다르게 코드를 짰다.
#include <iostream>
int BoxVolume (int length, int width, int height) {
return length*width*height;
}
int BoxVolume (int length, int width) {
int height=1;
return length*width*height;
}
int BoxVolume (int length) {
int width=1;
int height=1;
return length*width*height;
}
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<<"[5, D, D] : "<<BoxVolume(5)<<std::endl;
//std::cout<<"[D, D, D] : "<<BoxVolume()<<std::endl;
return 0;
}
거의 비슷하긴 하나, 나는 BoxVolume을 계산하는 함수에서 length, width, height를 각각 모두 변수로 살려둬야 하는 것이 취지에 맞는 해설이 아닌가.. 생각이 들었다.