歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++自定義異常類

C++自定義異常類

日期:2017/3/1 9:46:53   编辑:Linux編程

1.C++程序中處理異常或者錯誤,可以使用異常機制,異常處理的結構為:

try

{

//可能引發異常的代碼

}

catch( type e)

{

//異常處理

}

catch(…) //省略號代表可以接受任何類型的異常

{

//

}

C++拋出的異常可以int、doble、類等類型,拋出的異常要進行處理,否則會自動調用abort()函數終止程序。C++提供了了一些標准的異常類,exception類可以派生出bad_cast,runtime_error,bad_alloc,logic_error這些異常類。使用C++提供的標准異常類,程序員還可以自定義異常類。自定義異常類,需要定義標准異常的派生類,在派生類中初始化基類的構造函數。拋出、捕獲自定義異常類的方法與標准異常類相同。下面是自定義異常類的代碼:

# include <iostream>
using namespace std;
class myerror:public std::logic_error //從logic_error派生自定義異常類
{
public:
myerror(const std::string &s):std::logic_error(s){}
virtual ~myerror() throw(){}
};
class Sale
{
public:
Sale(int i):x(i){}
void cmp();
private:
int x;
};

void Sale::cmp()
{
try{
if (x>5)
throw myerror("number out of range"); //拋出異常
else
cout<<x<<endl;
}
catch (myerror &) //捕獲異常
{
cout<<"out of range"<<endl;
}
}

int main()
{
Sale s(13);
s.cmp();
cin.get();
return 0;
}

上面的myerror類在定義析構函數時,後面加了throw(),這是函數的異常說明。throw後面的括號表明可以拋出的異常類型,如果不拋出任何異常,括號內為空。這個析構函數不拋出任何異常。如果函數指明不拋出任何異常,但函數體內卻拋出異常,這是程序會調用terminate函數終止程序。如果基類中存在虛函數,虛函數拋出某種異常,派生類的虛函數版本也可以拋出此類異常或者不拋出任何異常,但不能拋出任何其它異常,就是說,派生類的虛函數拋出的異常要比基類更加嚴格。

Copyright © Linux教程網 All Rights Reserved