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

2092 단어 윤성우CC

문제 1

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

int main(void)
{
    std::cout<<"[3, 3, 3] : "<<BoxVloume(3,3,3)<<std::endl;
    std::cout<<"[5, 5, D] : "<<BoxVloume(5,5)<<std::endl;
    std::cout<<"[7, D, D] : "<<BoxVloume(7)<<std::endl;
    //std::cout<<"[D, D, D] : "<<BoxVloume()<<std::endl; 에러 !!
    
    
    
    return 0;
}

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

이 코드의 BoxVolume을 매개변수의 디폴트 값 지정 형태가 아닌 함수 오버로딩 형태로 재 구현해보자.

#include <iostream>
int BoxVloume(int length,int width ,int height)
{
    return length*width*height;
};
int BoxVloume(int length,int width)
{
    return length*width*1;
};
int BoxVloume(int length)
{
    return length*1*1;
};

int main(void)
{
    std::cout<<"[3, 3, 3] : "<<BoxVloume(3,3,3)<<std::endl;
    std::cout<<"[5, 5, D] : "<<BoxVloume(5,5)<<std::endl;
    std::cout<<"[7, D, D] : "<<BoxVloume(7)<<std::endl;
    //std::cout<<"[D, D, D] : "<<BoxVloume()<<std::endl; 에러 !!
    return 0;
}

구냥.. 바꿔주면 된다.

문제 2

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

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

int SimpleFunc(void)
{
	return 10;
}

첫번째 SimpleFunc이 디폴트 값을 주었으니
SimpleFunc() 을 실행하면
두번째 SimpleFunc(void)함수도 실행되고
첫번째 SimpleFunc 함수의 디폴트 값이 실행될것이니
충돌이 일어날것이다!!

즉! SimpleFunc() 을 실행하면 두 함수 모두 호출하는 결과를 가져온다.

좋은 웹페이지 즐겨찾기