جاهایی از مدیریت استثنا استفاده میشه که برنامه با کاربر نعامل داره و ممکنه ورودی که کاربر وارد می کنه درست نباشه چون اگر الگوریتم های برنامتون روی ورودی اشتباه انجام بشن برنامه جواب درستی نمیده و هم این که این جور جاها لازمه که ارور درستی رو به کاربر نمایش هم بدید .
3 تا کلمه کلیدی برای این کار داریم throw , try , catch
-
throw یک استثنا رو بر می گردونه
-
try یک بلاک تعریف می کنه که تعریف ها و متغیر های داخلش چک میشن که آیا چیزی throw شده یا نه( استثنا برگشت داده شده یا خیر)
-
catch هم یک بلاک تعریف می کنه که درصورتی که استثنا داخل بلاک try برگشت داده شده باشه بلاک مربوط بهش اجرا میشه.
داخل ++C شما میتونین هر نوعی رو throw کنید ولی اصولا بهتره یک کلاس از std::exception ارث ببرید و اون رو بر گردونید .
مثال :
فرض کنید یک قسمت از برنامه یک آدرس اینترنت می گیره از کاربر و اون صفحه رو دانلود می کنه حالا اگر صفحه که کاربر میده آدرس صحیحی نباشه طبیعتا برنامه هم نمی تونه چیزی دانلود کنه و باید ارور مربوطه رو بده .
#include <iostream>
#include <exception>
class BadUrl:public std::exception
{
const char* what() const {return "url is not correct!\n";}
};
struct Page
{
std::string data;
};
Page download(const std::string& address)
{
if(address.size()==0)
throw BadUrl();
Page page;
page.data="blah blah...";
return page;
}
int main()
{
try{//code haye dakhele in block check mishan
download("");
}
//khat zir exception hayee ke az class std::exception ers bordan ro migire
catch(std::exception& exc){
std::cout<< exc.what();//url is not correct chap mishe
}
//dar soorat bargardoondan exception ee
//ke az std::exception ers naborde bashe
//khat zir ejra mishe
catch(...){
std::cout<<"undefined error...";
}
}
http://ideone.com/PaO9Lx