程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ exception必須知道的東西(2)

c++ exception必須知道的東西(2)

編輯:C++入門知識

C++標准庫提供的邏輯異常包括以下內容。    invalid_argument 異常,接收到一個無效的實參,拋出該異常。    out_of_range 異常,收到一個不在預期范圍中的實參,則拋出。    length_error 異常,報告企圖產生“長度值超出最大允許值”的對象。    domain_error 異常,用以報告域錯誤(domain error)。 C++標准庫提供的運行時異常包括以下內容。    range_error 異常,報告內部計算中的范圍錯誤。    overflow_error 異常,報告算術溢出錯誤。    underflow_error 異常,報告算術下溢錯誤。    bad_alloc 異常,當new()操作符不能分配所要求的存儲區時,會拋出該異常。它是由基類exception 派生的。 以上前 3 個異常是由runtime_error 類派生的。 例子: # include<iostream> # include<vector> #include<stdexcept>     using namespace std ; int main() {  vector<int> iVec ;  iVec.push_back(1) ;  iVec.push_back(2) ;  iVec.push_back(3) ;   try{   cout << iVec.at(5) << endl ;   }catch(out_of_range err) {    cout << "êy×é????" << endl ;   }   system("pause"); } 綜合經典實例: #include<iostream> using namespace std; class Exception { public :  Exception(string _msg="") {   msg = _msg ;  }  string getMsg() {   return msg;  } protected:  string msg ; };   class PushOnFull:public Exception{  PushOnFull(string msg=""):Exception(msg){} }; class PopOnEmpty:public Exception{ public:   PopOnEmpty(string msg = ""):Exception(msg){  } }; class StackException { public:  StackException(Exception _e , string _msg ):e(_e),msg(_msg) {     }  Exception getSource(){   return e ;  }    string getMsg() {   return msg ;  } private:  Exception e ;  string msg ; }; template<class T> class iStack { public:  iStack(int _capacity = 64) {   capacity = _capacity ;   data = new T[capacity] ;   top = 0 ;  }  ~iStack() {   cout <<"~iStack is called ... ... "<< endl ;   delete[] data ;  }  void push(T t) throw(Exception) {   if (top>=capacity) {    throw Exception("???úá?") ;   }   data[top] = t ;   top++ ;  }  T pop() throw(Exception){   if (top <= 0 ) {    throw Exception("???a??") ;   }   top--;   T t = data[top] ;   return t ;  }  private:  T* data ;   int capacity ;  int top ; }; void test() {  iStack<int> istack(10) ;  try{     for(int i = 0 ; i < 20 ; i++ ) {    istack.push(i) ;   }    int p = istack.pop() ;    cout << p << endl ;      }catch(Exception e) {   cout <<"2???á?"<< endl ;   throw StackException(e,"±??a×°á?μ?òì3£") ;   } } void test2() {  iStack<int> istack(10) ;  try{     for(int i = 0 ; i < 20 ; i++ ) {    istack.push(i) ;   }    int p = istack.pop() ;    cout << p << endl ;      }catch(...) {   cout <<"?a??ê?±?D?òa?′DDμ?,??DD×ê?′êí???è"<< endl ;      } } int main() {  try{   test() ;      test2();  }catch(StackException se) {   cout << se.getSource().getMsg()<<"  " << se.getMsg()<< endl ;  }  system("pause"); }        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved