소프트웨어/C/C++
c/c++] try catch
cs만두
2013. 8. 11. 22:40
try{
if(i==0)
throw b; //캐치문으로 b를 던져버림
out= 100/i;
}catch(int exception){
cout<<exception<<" 입력됨. 다시입력해주세요"<<endl;
}
만약 throw b를했는데 적절한 try catch문이 없다면 프로그램은 stdlib.h의 abort함수를 자동으로 출력한다.(에러창)
그리고 프로그램이 종료된다.
그리고 throw는 int나 char뿐아니라 클래스를 던져버릴수도있다.
예를들어
class exceptClass{
int id;
char* data;
public:
void exceptClass(int _id,char& _data){
data=new char[strlen(_data)+1];
strcpy(data,_data);
id=_id;
}
void what(){
cout<<id<<" "<<data<<endl;
}
}
이런식으로 클래스를만들어서
익셉션발생시
throw excptClass(10,"ㅇㅁ");
...}catch(excptClass& ex){... //받는쪽. ref로 받는다
같이 클래스를 캐치문으로 날려버릴 수 있다.
이점은, 좀더 명확하게 익셉션의 이유를 알 수 있다는 점이다.
그런데 위의 익셉트클래스는 깊은복사가 이루어지고 있다. 꼴랑 익셉션알아볼라고 깊은복사를 하기보다는
그냥 *를 주고받는 간결한 구조가 더 좋다고한다.