예외처리를 하는 try~catch문은 if~else 문보다 효율적으로 예외처리를 한다.
예외 처리(Exception Handling)
try{
//code
}
catch(t){/*code*/}
/* try 불록을 끝내고 t 타입에 해당되는 예외상황을 처리한다. catch 다음 코드는 t에 의해 보고된 예외상황을
처리할 수 있는 적당한 작업을 수행해야 한다.*/
try문 내부에 예외가 발생하지 않았을때 실행할 코드를 넣는다. 만일 try문에 예외가 발생하게 된다면 catch문으로 제어가 옮겨진다.
int main()
{
int i = 0;
cout << "Input : ";
cin >> i;
try{
if(i == 0) throw i;
}catch(int a){
cout << a << "error" << endl;
return 0;
}
cout << i << "Input" << endl;
return 0;
}
이 프로그램은 0 값이 드러오면 error를 이르킨다. if 문이 i를 검사하여 0 이면 throw 문으로 예외를 던지며 이때 던져지는 i의 값을 catch문에서 받아 catch문으로 제어를 옮긴다.
catch문은 오버로딩이 되기 때문에 매개변수가 반드시 throw의 Type과 동일해야 한다.
위 코드에서
catch(double a) 만 해버리면 에러가 발생한다.
try{
if(i == 0) throw i;
}catch(int a){
cout << a << "error" << endl;
//return 0;
}
catch(double a){
cout << a << "error" << endl;
//return 0;
}
catch(char a){
cout << a << "error" << endl;
//return 0;
}
catch(...){
cout << "error" << endl;
//return 0;
}
catch(...)은 esle 과 동일하다 catch문에서 해당되는게 없다면 catch(...) 로 제어가 이동한다.