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

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

編輯:C++入門知識

異常處理: 1)處理機制:   Try {                                               若try子句中的任何函數拋出logic_error或者調用另一   代碼                                         個函數拋出這類異常,則catch語句會立即執行;   }   Catch(logic_error& e){                        關鍵字throw表明函數將立即退出,不會返回到調用   處理程序                                    程序,而是一直向外退出,直到找到處理異常的語句;   }   n  若有異常則通過throw操作創建一個異常對象並拋擲。   n  如果在保護段執行期間沒有引起異常,那麼跟在try塊後的catch子句就不執行。程序從try塊後跟隨的最後一個catch子句後面的語句繼續執行下去。   n  catch子句按其在try塊後出現的順序被檢查。匹配的catch子句將捕獲並處理異常(或繼續拋擲異常)。   n  如果匹配的處理器未找到,則運行函數terminate將被自動調用,其缺省功能是調用abort終止程序。   2)拋出和捕獲值:   異常捕獲機制:   Try塊中不需要捕獲所有的異常,當異常發生時,異常處理機制會子自裡向外的查找匹配的處理程序,並只執行滿足條件的第一個處理程序。   寫catch語句時,應該先匹配派生類,然後基類;   拋出的值可以是任何類型,基本類型或者對象;但是捕獲時,有類型轉換問題,(int—>double,或者char*àstring)改變原意;   為了解決這個問題,是拋出和捕獲對象:   例子:   #include<iostream>   #include<stdexcept>   usingnamespace std;   classFutureValueError : public logic_error{   public:          FutureValueError(stringe):logic_error(e){}   };   doublefuture(){          throw FutureValueError("illegalfuture_value ");          return 2.0;   }   voidread(){          try{                 double d=future();   cout<<"intread()"<<endl; //這種情況,以後的語句永遠執行不到          }          catch(bad_alloc& e)          {                 cout<<"catch bad_allocerror"<<e.what()<<endl;          }   }   voidprocess_record(){          try{                 read();          }          catch(logic_error& e)          {                 cout<<"catchlogic_error "<<e.what()<<endl;          }   }   intmain(){          process_record();          system("pause");   }   運行結果:   分析:因為開始拋出的FutureVauleError ,沒有catch語句;所以繼續在拋出到read()函數塊的catch語句中,read()語句中的catch語句沒有滿足條件的處理機制;所以繼續拋出到process_error中,找到相應的處理機制;   這樣在異常拋出函數以後的語句不能執行;   標准程序庫異常處理   ++標准庫中的異常層次的根類被稱為exception,定義在庫的頭文件<exception>中   exception類的接口如下:   namespacestd{       class exception{       public:                        exception() throw() ;                        exception(const exception&) throw() ;                        exception&operator=(const exception&) throw() ;                        virtual ~exception()throw() ;                        virtual const char* what()const throw() ;          };   }

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