try
{
์์ธ ๋ฐ์์ง์ญ
}
try ์์ ์ฝ๋ ์์์ error๊ฐ ๋๋์ง ํ์ธ. ๋ง์ฝ์ error์ผ์
throw๋ ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
์ด๋ ์ค์ํ ์ ์ด throw์ ๋ณ์๋ฅผ ๋ฃ์ด์ ๋ณด๋ด์ค ์ ์๋ค๋ ์ ์ด๋ค.
ex) throw(expn)
catch( ๋ณ์ ){
์์ธ์ฒ๋ฆฌ ์ ์ํํ ์ฝ๋
}
catch์ ๊ฒฝ์ฐ๋ try ๋ค์ ๊ผญ ์์ผํ๋ค. ๋ํ catch๋ return type์ด ์๋ ํจ์ํํ์ ์ ์ฌํ๋ค.
ํฐ ํน์ง์ผ๋ก๋ catch(๋ณ์)์ ์๋ ๋ณ์์ throw ๋ก ๋์ง ๊ฐ์ ๋ฐ์ ์ ์๋ค.
#include<iostream>
using namespace std;
int main() {
//๋๊ฐ์ ์ซ์ ์ ์ธ, ๋ฐ๊ธฐ
int num1, num2;
cout << "๋ ๊ฐ์ ์ซ์ ์
๋ ฅ: ";
cin >> num1 >> num2;
//try๋ฌธ num2==0์ด๋ฉด num2๋ฅผ throwํจ.
try {
if (num2 == 0)
throw num2;
cout << "๋๋์
์ ๋ชซ: " << num1 / num2 << endl;
cout<<"๋๋์
์ ๋๋จธ์ง: "<< num1 % num2 << endl;
}
// throw ํ num2๋ฅผ expn์ผ๋ก ๋ฐ์.
catch (int expn)
{
cout << "์ ์๋ "<<expn<<"์ด ๋ ์ ์์ต๋๋ค." << endl;
cout << "ํ๋ก๊ทธ๋จ์ ๋ค์ ์คํํ์ธ์." << endl;
}
return 0;
}
invalid_argument ๋ throw์์ ๋ณ์๋ก ๋๊ธฐ๊ธฐ ๋์ ์ ์ด๋ฅผ ํ์ฉํ ์ ์๋ค. ์ด๋ ๊ธฐ๋ฅ์ ๋น์ทํ์ง๋ง, ์ปดํจํฐ์๊ฒ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค๋๊ฒ์ ๋ช ์ํ ์ ์๋ค. ๋จ, invalid_argument๋ฅผ ์ฐธ์กฐ๋ก ๋ฐ์์ผ ํ๋ค.
#include<iostream>
using namespace std;
void divide(int a, int b) {
if (b != 0) {
cout << "๋๋์
์ ๋ชซ: ";
cout << a / b << "\n";
cout << "๋๋์
์ ๋๋จธ์ง: ";
cout << a % b << "\n";
}
// 2. b = 0 ์ด๋ผ๋ฉด ์๋ ๊ฐ์ throw ํจ.
throw invalid_argument("์ ์๋ 0์ด ๋ ์ ์์ต๋๋ค.\nํ๋ก๊ทธ๋จ์ ๋ค์ ์คํํ์ธ์.\n");
}
int main() {
//์ ์ num1, num2 ์์ฑ, ๊ฐ ๋ฐ๊ธฐ
int num1, num2;
cout << "๋ ๊ฐ์ ์ซ์ ์
๋ ฅ: ";
cin >> num1 >> num2;
// 1. try(ํจ์์ ๋ฃ์์๋ ํ์ธ)
try {
divide(num1, num2);
}
// 3. throw๋ฅผ ๋์ ธ์ฃผ๋ฉด invalid_argument ๊ฐ์ e๋ก ์ง์ ํด์ฃผ๋ฉฐ, ์ด๋ฅผ ์ถ๋ ฅ
catch(invalid_argument &e)
{
cerr << e.what();
}
return 0;
}