728x90
반응형
1. throw 와 try, catch()
- throw : 프로그램이 정상적으로 실행될 수 없는 상황일 때 이 명령으로 예외를 던진다. throw 다음에 던지고자 하는 예외를 적는다. 예외를 던
진다 는 것은 예외가 발생되었다는 것을 알리며 이 예외를 처리하는 catch문으로 점프하도록 한다. throw 명령 아래쪽의 코드들은
모두 무시되며 곧바로 예외 처리 구문으로 이동한다.
- try : 예외가 발생할만한 코드 블록을 지정하는데 try 다음의 { } 괄호안에 예외 처리 대상 코드를 작성한다. 이 블록 안에서 예외가 발생 때
throw 명령으로 예외를 던진다.
- throw : 프로그램이 정상적으로 실행될 수 없는 상황일 때 이 명령으로 예외를 던진다. throw 다음에 던지고자 하는 예외를 적는다. 예외를 던
진다 는 것은 예외가 발생되었다는 것을 알리며 이 예외를 처리하는 catch문으로 점프하도록 한다. throw 명령 아래쪽의 코드들은
모두 무시되며 곧바로 예외 처리 구문으로 이동한다.
- try : 예외가 발생할만한 코드 블록을 지정하는데 try 다음의 { } 괄호안에 예외 처리 대상 코드를 작성한다. 이 블록 안에서 예외가 발생 때
throw 명령으로 예외를 던진다.
- catch : try 블록 다음에 이어지며 던져진 예외를 받아서 처리한다. 그래서 catch 블록을 예외 핸들러라고 부른다. catch 다음에는 받고자
하는 예외의 타입을 적는데 이 객체는 throw에 의해 던져진다. catch 블록에는 예외를 처리하는 코드가 작성된다.
2. 예제 소스
if(0>index)
{
throw "배열 범위를 초과하였음";
}
if(size<=index)
{
throw "배열 범위를 초과하였음";
}
일단 throw는 출력할 메시지 를 말한다. 통해서 오류부분을 메시지 출력으로 바꾸고
try부분 은 실행되는 부분이다. arr.SetAt(20,100)처럼 예외가 발생되는부분에 살짝 걸쳐두면된다.
마지막으로 catch()부분인데 이경우는 도스창에서 명령어를 띄우는것이다.
일반적으로 catch는 메시지를 받는부분이고 그 메시지는 catch의 인자로
문자열이기때문에 const char *를 사용하였다.
예외라는것은 아트메가에서 인터럽터와 비슷하게 생각하면된다.(문자열로 보내는 경우)
class MyException
{
public:
const void *sender;
const char *description;
int info;
MyException(const void *sender,const char *description,int info)
{
this->sender=sender;
this->description=description;
this->info=info;
}
};
- 따로 클래스를 만들어서 예외를 처리할수 있다.
throw MyException(this,"배열 범위를 초과하였음",index);
- throw에서 객체를 넘겨줄수도 있다. 생성자에 맞게 인수를 전달
catch(MyException T)
{
cout<<"객체주소:"<<T.sender<<endl;
cout<<"예외 내용:"<<T.description<<endl;
cout<<"부가정보:"<<T.info<<endl;
}
- catch부문에서는 인수를 객체를 만들어 선언하면 아무 문제 없다.
3. throw 와 catch의 관계
- 각 함수는 다음 함수를 호출을 하고 마지막함수에 throw을 넣었다. 그러면 결과를 예측 해보자.
C함수에서 throw 던지면 B에서 catch 해서 출력후 다시 throw 던지면 A에서 catch 한다. A에서
받으면 다시 main의 catch 로 가서 출력한다.
기본적으로 이전 함수catch로 단계별로돌아가는걸 볼수 있다.
※ 타입이 없는 경우
- throw에서 던질경우 catch가 받을수 있다. 그런데 throw을 던질때 타입이 객체이면
그 객체 맞게 catch간다. 하지만 throw 던질 타입이 없다면 저렇게 catch(...)으로
표현할수있다. 출력하면 당연히 마지막 catch(...) 실행 된다.
많이 부족하지만 잘봐주세요..ㅋㅋ
하는 예외의 타입을 적는데 이 객체는 throw에 의해 던져진다. catch 블록에는 예외를 처리하는 코드가 작성된다.
2. 예제 소스
if(0>index)
{
throw "배열 범위를 초과하였음";
}
if(size<=index)
{
throw "배열 범위를 초과하였음";
}
일단 throw는 출력할 메시지 를 말한다. 통해서 오류부분을 메시지 출력으로 바꾸고
try부분 은 실행되는 부분이다. arr.SetAt(20,100)처럼 예외가 발생되는부분에 살짝 걸쳐두면된다.
마지막으로 catch()부분인데 이경우는 도스창에서 명령어를 띄우는것이다.
try |
문자열이기때문에 const char *를 사용하였다.
예외라는것은 아트메가에서 인터럽터와 비슷하게 생각하면된다.(문자열로 보내는 경우)
class MyException
{
public:
const void *sender;
const char *description;
int info;
MyException(const void *sender,const char *description,int info)
{
this->sender=sender;
this->description=description;
this->info=info;
}
};
- 따로 클래스를 만들어서 예외를 처리할수 있다.
throw MyException(this,"배열 범위를 초과하였음",index);
- throw에서 객체를 넘겨줄수도 있다. 생성자에 맞게 인수를 전달
catch(MyException T)
{
cout<<"객체주소:"<<T.sender<<endl;
cout<<"예외 내용:"<<T.description<<endl;
cout<<"부가정보:"<<T.info<<endl;
}
- catch부문에서는 인수를 객체를 만들어 선언하면 아무 문제 없다.
3. throw 와 catch의 관계
#include <iostream> |
C함수에서 throw 던지면 B에서 catch 해서 출력후 다시 throw 던지면 A에서 catch 한다. A에서
받으면 다시 main의 catch 로 가서 출력한다.
기본적으로 이전 함수catch로 단계별로돌아가는걸 볼수 있다.
※ 타입이 없는 경우
catch(outofRangeException &T) |
그 객체 맞게 catch간다. 하지만 throw 던질 타입이 없다면 저렇게 catch(...)으로
표현할수있다. 출력하면 당연히 마지막 catch(...) 실행 된다.
많이 부족하지만 잘봐주세요..ㅋㅋ
728x90
'코스웨어 > 10년 시스템제어' 카테고리의 다른 글
시스템제어 일일보고 11번 박동원 (0) | 2010.05.26 |
---|---|
시스템제어 5월 25일 일일보고서 10번 문현철 (0) | 2010.05.25 |
[일일보고서] 5월24일(월) - 9번 노현용 (0) | 2010.05.25 |
아트메가 프로젝트 (0) | 2010.05.21 |
시스템 제어 일일 보고서 - 김진웅 (7번) (1) | 2010.05.19 |
[시스템 제어]5월 18일 6번 김 신 호 (0) | 2010.05.19 |
WinVi 편집기(윈도우에서 사용가능한 vi편집기) 및 몇가지 자주사용하는 명령어. (3) | 2010.05.19 |
시스템 제어 일일 보고서 - 8조 김민철(4번) (1) | 2010.05.18 |