C++ Chapter 14.5 : 함수 try
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 14. 예외처리 : 함수 try
🔔 함수 try 사용 X
#include <iostream>
#include <exception>
class A
{
private:
int m_x;
public:
A(int x) : m_x(x)
{
if (x == 0)
throw 1;
}
};
class B : public A
{
public:
B(int x)
: A(x)
{}
};
int main()
{
try
{
B b(0);
}
catch (...)
{
std::cout << "Catch in main()" << std::endl;
}
return 0;
}
💎출력💎
Catch in main()
- main 에서
B b(0)
B 클래스
의 생성자에서 부모인 A 클래스의 생성자를 호출한다.A 클래스
에서 x 가 0 이므로 예외를 발생시키고 1 을 trhow 한다.
A 생성자에서 발생한 예외를 (A 생성자를 호출한 B 생성자를 호출한) main이 아닌 그냥 바로 B 생성자 아래에서 예외를 catch 하고 싶다면?
- 👉
🔔 함수 try 사용 O
#include <iostream>
#include <exception>
class A
{
private:
int m_x;
public:
A(int x) : m_x(x)
{
if (x == 0)
throw 1;
}
};
class B : public A
{
public:
B(int x) try
: A(x)
{}
catch(...)
{
std::cout << "Catch in B constructor" << std::endl;
}
};
int main()
{
try
{
B b(0);
}
catch (...)
{
std::cout << "Catch in main()" << std::endl;
}
return 0;
}
💎출력💎
Catch in B constructor
Catch in main()
B(int x)
try
👉 이렇게 함수 뒤에try
를 붙여주면 된다.
B(int x)
함수(생성자도 함수!) 전체가try
로 묶인 효과를 가진다.- 따라서 B 생성자 아래에 있는
catch(...)
에서 호출한 A 생성자에서 발생한 예외를 스택 되감기를 통해 받게 된다.- “Catch in B constructor” 출력
- 근데 이
catch(...)
문 안에throw
가 명시 되어있지 않은데도 불구하고 시스템 상으로 또 다시throw
가 던져져 main 함수의catch(...)
가 이를 받게 된다.- 함수 try의 예외를 받는 catch 에서 한번더
throw;
하고 예외를 던지는 특징이 있다. - 일반 try였으면 예외 처리 끝났으니 실행되지 않았을텐데!
- 함수 try의 예외를 받는 catch 에서 한번더
함수 try 특징 정리
- 함수 하나 전체를
try
로 묶는다. - 함수
try
의 예외를 받은catch
에선 명시되있지 않아도 한번 더 예외를throw
한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기