




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第十五章異常Chapter 15 Exception異常是一種程序控制機制,與函數(shù)機制獨立和互補函數(shù)是一種以棧結(jié)構(gòu)展開的上下函數(shù)銜接的程序控制系統(tǒng),異 常是另一種控制結(jié)構(gòu),它依附于棧結(jié)構(gòu),卻可以同時設置多個異 常類型作為網(wǎng)捕條件,從而以類型匹配在棧機制中跳躍回饋.異常設計目的:棧機制是一種高度節(jié)律性控制機制,面向?qū)ο缶幊虆s要求對象 之間有方向、有目的的控制傳動,從一開始,異常就是沖著改 變程序控制結(jié)構(gòu),以適應面向?qū)ο蟪绦蚋行У毓ぷ鬟@個主題, 而不是僅為了進行錯誤處理。異常設計出來之后,卻發(fā)現(xiàn)在錯誤處理方面獲得了最大的好處1. 錯誤處理的復雜性(Eiror Processing ComDlex
2、ity)2. 使用異常(Using Exception)3. 捕捉異常(Catching Exception)4. 異常申述(Exception Description)5. 異常繼承體系(ExceDtion Inheritance System)6. 異常應用(Exception Applications)7. 非錯誤處理(Non-Eiror Processing):c+語言是按函數(shù)調(diào)用機制展開程序執(zhí)行的, 般對處理錯誤的編程有下列常規(guī)手段::.遇到錯誤,立即終止程序運行。如打不開文件, 或者讀不到所要求的數(shù)據(jù),則只能終止運行:f1501.cpp #include<fstream>
3、;心 #include<iostream> #include<cmath> using namespace std; void fn()< ifstream in("abc.txt"); if(!in)cout«HError: open file failureAn" exit(1); for(int a; in»a; cout«sqrt(a*1.0)«"n") if(a<0) cout«nError: read in illegle data.nH; exi
4、t(1);/ int main()fn(); 2 .返回一個表示錯誤的值給上層函數(shù)最常見的是邏輯值返回函數(shù),如判斷是否素數(shù), 判斷是否字母等,對于不同要求的程序來說,很 難說一定是錯誤的。除此外,函數(shù)返回類型是一定的,所以若有些值 是錯誤的,有些值是對的,必須預先規(guī)定一個范 圍,讓調(diào)用者去判斷。應該讓主體函數(shù)去處理問 題。:3.返回一個合法值,但通過全局溝通手段,設置 錯誤狀態(tài)。-這種方式是為了遠距離傳輸錯誤信息而采用的一種以 破壞程序結(jié)構(gòu)為代價的編程手法。如在C中,設置一個全局變量errno,專門存放錯誤代碼,調(diào)用一個庫函數(shù) 后,為了確認其運行的正確性,便可以通過errno查訪 實現(xiàn)。Vis
5、ual C+ Program Design:4.調(diào)用預先準備好的錯誤處理函數(shù),讓它決定是 停止運行還是繼續(xù)往下。Visual C+ Program Design可以將程序運行看作是諸多模塊的工作及相互往來 一個模塊發(fā)生的錯誤,需要借助于另一個模塊進行修復每個模塊包含一個層層調(diào)用的函數(shù)體系發(fā)生錯誤后,如果層層函數(shù)返回,則不但動作緩慢,而且 錯誤信息丟失,失去處理的針對性發(fā)生錯誤,說明模塊服務失敗,需要在主體模塊中找說法, 給予必要的處理.不同的系統(tǒng),其主體模塊是不同的,決定了 “說法”也是 不同的.如圖:Visual C+ Program Design:函數(shù)是棧式管理的,從一個被調(diào)用的函數(shù)現(xiàn)場要
6、 把信息傳遞到相隔若干調(diào)用的主調(diào)函數(shù),需要逐 層退棧,一邊退棧,一邊通過函數(shù)返回值回饋,而且,每個函數(shù)都需要相應的接受判斷以及接力 傳遞的工作。如有一個簡單的系列文件處理程序, 假定文件在打開前,要經(jīng)歷文件名確定和打開方 式確定的工作,如圖15-2:Visual C+ Program Design圖15-2鏈式調(diào)用與出錯后跳躍返回Visual C+ Program Designf1502.cpp #include<fstream> #include<iostream> using namespace std; void procFileName(string s); b
7、ool procOpenMode(string s); bool openln(string s); bool openOut(string s); int main()A procFileName("iabcn); procFileName("oabcn);: void procFileName(string s) for(char c='O: cv=9; c+) string t = s + c + ".txt" if(!procOpenMode(t) coutvv”error opening “vvtvvW;心叫嗣心+卩啞窗呃映 bool
8、procOpenMode(strings) if(sO=T&&openln(s) | s0=o,&& openOut(s) return true; return false; bool openln(string s) ifstream in(s.c_str(); if(!in) return false; for(string line; getline(in, line); cout«line«Hnn); return true; bool openOut(string s)A fstream out(s.c_str(), ios:in
9、|ios:out|ios:ate); if(!out) return false;A cout«s+n is here.nn; outvvs+”isokrT; return true;0Visual C+ Program Design:異常是專門針對抽象編程中的一系列錯誤處理的, C+中不能借助函數(shù)機制,因為棧結(jié)構(gòu)的本質(zhì)是 先進后出,依次訪問,無法進行跳躍,但錯誤處 理的特征卻是遇到錯誤信息就想要轉(zhuǎn)到若干級之 上進行重新嘗試,如圖:Visual C+ Program Design:錯誤處理示意:Visual C+ Program Design:異常超脫于函數(shù)機制,回跳。決定了其對函數(shù)
10、的跨越式Visual C+ Program Design15.2.1異常使用三部曲Visual C+ Program DesignVisual C+ Program Design 1 框定異常(try語句塊)在祖先函數(shù)處,框定可能產(chǎn)生錯誤的語句序列,它是異常的根據(jù), 若不框定異常,則沒有異常。 2定義異常處理(catch語句塊)將岀現(xiàn)異常后的處理過程放在catch塊中,以便當異常被拋出, 因類型匹配而捕捉時,就處理之。 3 拋擲異常(throw語句)在可能產(chǎn)生異常的語句中進行錯誤檢測,有錯就拋擲異常Visual C+ Program Design異常處理的實現(xiàn)機顒:拋擲異常的程序段void F
11、un ():捕獲并處理異常的程序段 try 復合語句throw 表達式;catch (異常類型聲明)復合語句catch (類型(形參)復合語句程序運行結(jié)果如下:5/2=2except of deviding zero, that is ok-丄 V"甲 r 椚FBIM12-1處理除零異常itinclude<iostrearn. h>int Div(int x, int y); int main() try cout«"5/2二"<XDiv(5, 2)«endl; cout"8/0="«Div(&a
12、mp; 0) «endl; cout«7/l=«Div(7,1) «endl;catch(int) cout"except of deviding zero rT; , ”cout«>rthat is ok n"int Div(int x, int y) if(y=0) throw y; return x/y;:前兩個步驟是一個函數(shù)中定義的,而拋擲異常則 可以跨函數(shù)使用。:當直接在try語句塊中使用時,異常處理退化為一 般的錯誤處理模式。:在try語句塊中,會有一些語句調(diào)用了其他函數(shù), 它們之間則構(gòu)成一個調(diào)用鏈,在調(diào)用
13、鏈中的某一 個結(jié)點上,如果岀現(xiàn)拋擲語句,則便是一般意義 上的異常了。調(diào)用者異常處理的基本思想函數(shù)f()捕獲并處理異常調(diào)用關系 異常傳播方向函數(shù)g()函數(shù)h() 引發(fā)異常Visual C+ PrognmsDesign:1若有異常則通過throw操作創(chuàng)建一個異常對象并拋擲。 2將可能拋出異常的程序段嵌在try塊之中。控制通過正常 的順序執(zhí)行到達try語句,然后執(zhí)行try塊內(nèi)的保護段。:3如果在保護段執(zhí)行期間沒有引起異常,那么跟在tty塊后 的catch子句就不執(zhí)行。程序從try塊后跟隨的最后一個 catch子句后面的語句繼續(xù)執(zhí)行下去。:4 catch子句按其在try塊后出現(xiàn)的順序被檢查。匹配的ca
14、tch子句將捕獲并處理異常(或繼續(xù)拋擲異常)o:5如果匹配的處理器未找到,則運行函數(shù)terminate將被自 動調(diào)用,其缺省功能是調(diào)用abort終止程序。Visual C+ Progr:wi>Designi nrri異常接口聲明Visual C+ PrograahJDesignVisual C+ PrograahJDesign:可以在函數(shù)的聲明中列出這個函數(shù)可能拋 擲的所有異常類型。例如:void fun () throw (A, B, C, D);:若無異常接口聲明,則此函數(shù)可以拋擲任 何類型的異常。:不拋擲任何類型異常的函數(shù)聲明如下:void fun () throw ();Visu
15、al C+ PrograahJDesign異常處理中的構(gòu)造與Visual C+ Progra尹尹esignVisual C+ Progra尹尹esign找到一個匹配的catch異常處理后初始化參數(shù)。將從對應的try塊開始到異常被拋擲處之 間構(gòu)造(且尚未析構(gòu))的所有自動對象 進行析構(gòu)。從最后一個catch處理之后開始恢復執(zhí)行Visual C+ Progra尹尹esignVisual C+ Progra尹尹esignVisual C+ Progra尹尹esign例122異常處理研的析27class Demo public:Demo ();Demo ();Demo : :Demo ()cout<
16、;<,z構(gòu)造 Demo.,z«endl: Demo : : Demo ()cout<<,z析構(gòu) Demo.,z«endl;#include <iostreamh>void MyFunc ( void );class Expt public:Expt () ;"Expt () ;const char *ShowReasonO const return,zExpt類異常?!?;void MyFunc () Demo D;cout«在MyFunc ()屮拋擲Expt類異 常。,z<<endl;throw Expt ();
17、int main() cout<<,z在main函數(shù)屮。<<endl;try cout«z,在try塊中,調(diào)用MyFunc () o ,z <<endl; MyFunc ();catch( Expt E ) cout<<,z在catch界常處理程序中?!癳ndl; cout«/,捕獲到Expt類型異常:"; cout<<E ShowReasonO«endl;catch( char *str ) cout<<,z捕獲到丿他的異,z«str«endl;cout
18、1;"回到main函數(shù)。從這里恢復執(zhí)行。 <<endl;return 0;27g;E:cou2005. 9testConsD.-Inix在ma|在嚴烏塊中,調(diào)用MifFuncOo購造Beno.庭flyFunc: 中拋擲Expt類異常。1 t fl* |fee ate h異常處理程序中o來弁©焉:ExM類異常。 衣里恢復執(zhí)行。Deno 捕獲到Egt類型 回到main函數(shù)。UNISPIM5.E:comm2005. 9t程序運行時輸岀:在main函數(shù)中。在try塊中,調(diào)用MyFunc()o構(gòu)造Demo.在M yFunc()中拋擲Expt類異常。 析構(gòu)Demo.在cat
19、ch異常處理程序中。 捕獲到Expt類型異常:Expt類異常。 回到main函數(shù)。從這里恢復執(zhí)行。:如下面的程序是退化為普通錯誤處理的異常方式:Visual C+ Program Design28f1503.cpp #include<fstream>心 #include<iostream> using namespace std;A int main(int argc, char* argv) ifstream in(argv1); try if(!in) throw string(argv1); catch(string s) cout«s+n File O
20、pening ErrorAn'1; return 1; for(string s; getline(in5 s); cout«s«endl);Visual C+ Program Design:在這種簡單應用的場合,沒必要使用異常,可以 用下列代碼替代:if(!in) cout«(,Error Opening File”vvargv1vv“n”; retur n 1; for(string s; getline(in5 s); cout«s«endl);:在f1502.cpp中,是在出現(xiàn)錯誤時,從出現(xiàn)錯誤處 到處理錯誤處,沿著函數(shù)調(diào)用的足
21、跡,一步步往 上返回,幾經(jīng)周折后,岀錯信息早已丟失,剩下 的只有岀錯狀態(tài),程序f1504.cpp改寫為異常處理 方式處理,就可以實現(xiàn)跨函數(shù)的大跳轉(zhuǎn)了: #include<fstream> #include<iostream> using namespace std; void procFileName(string s);: void procOpenMode(string s); voidopenln(stri ngs); void openOut(string s); int main()A procFileName("iabcn); procFileNa
22、me("oabcn); void procFileName(string s)A try for(char c=*0' cv=9; C+) procOpenMode(s + c+”txt”); catch(string s) cout«nerror opening H«s«H not existed.n"Visual C+ Program Design void procOpenMode(string s) if(sO=T) openln(s); else openOut(s); void openln(string s) ifstre
23、am in(s.c_str(); if(!in) throw s+" inFile"A for(string line; getline(in3 line); cout«line«HrT); void openOut(string s) fstream out(s.c_str()5ios:in|ios:out|ios:ate); if(!out) throw s+string(" outFile"); out«s+n outFile is ok.nH;cout«s+H is here.'rT;Visual
24、C+ Program Design try語句中,涉及到類的,本質(zhì)上都是函數(shù)調(diào)用。 throw A():異常機制與函數(shù)機制正交(互不干涉),但捕捉 的方式是基于類型匹配。捕捉相當于函數(shù)返回類 型的匹配,而不是函數(shù)參數(shù)的匹配,所以捕捉不 用考慮一個拋擲中的多種數(shù)據(jù)類型匹配問題,如: #include<iostream>: using namespace std; class A; class B; int main() try int j=0; double d=2.3; char str20=HHelloH;A cout«nPlease input a exception
25、 number: ”; int a; cin»a; switch(a)A case 1: throw d; case 2: throw j; case 3: throw str; case 4: throw A(); case 5: throw B();default: cout«HNo throws hereAn" Visual C+ Program Design catch(int) cout«nint excepti on.'rT; catch(double) cout«ndouble exceptionAn" catc
26、h(char*) cout«Hchar* exception.nH; catch(A)A cout«Hclass A exception.n" catch(B)A cout«Hclass B exception.n" cout«nThafs ok.nn;Visual C+ Program Design catch代碼塊必須岀現(xiàn)在try后,并且在try塊后可 以岀現(xiàn)多個catch代碼塊,以捕捉各種不同類型的 拋擲。:異常機制是基于這樣的原理:程序運行實質(zhì)上是 數(shù)據(jù)實體在做一些操作,因此發(fā)生異常現(xiàn)象的地 方,一定是某個實體岀了差錯,該實體
27、所對應的 數(shù)據(jù)類型便作為拋擲和捕捉的依據(jù)。:拋擲的實體已經(jīng)存在,不需要通過類型轉(zhuǎn)換來創(chuàng) 建一個臨時實體,實參與形參也不能用相容類型 提升這一規(guī)則。另一方面,捕捉處理并不一定需 要實參傳遞。Visual C+ Program Design異常捕捉的類型匹配之苛刻程度可以和模板的類型匹配媲 美,它不允許相容類型的隱式轉(zhuǎn)換,比如,拋擲char類型用int 型就捕捉不到.例如下列代碼不會輸出“int exception二 從而也不會輸出“Thafsok.”因為出現(xiàn)異常后提示退出 int main () trythrow "H ; catch (int) coutint exceptionn;
28、cout<</That,s ok. n;licrosoft Tisual C+irnhandled exception in testCons. exe (KEKNEL32.DLL): OxE06II7363: Microsoft Exception.:程序中可以設置一道道捕捉的關卡,如果拋擲的 異常,循著調(diào)用鏈往上,在最近的捕捉關卡未被 捉住,則還會被更上端的捕捉關卡追捕,直逼到 系統(tǒng)的最后一道防線,terminate.:異常拋擲后總是沿著函數(shù)調(diào)用鏈往上,直到被某 個函數(shù)捉住,因此,異常拋擲、捕捉以及處理都 依附于函數(shù),函數(shù)承載著異常。:上下游函數(shù)的聯(lián)系,可以通過異常申述來獲得,
29、 異常申述就是在函數(shù)聲明和函數(shù)定義的頭部加上 可能拋擲的異常集合,女口:Visual C+ Program Design異常申述示例 void f() throw(A5B); void g(); void h() throw();:說明f函數(shù)可能會拋擲出A和B類的異常,g函數(shù)內(nèi) 可能會拋擲岀任何類型的異常,h函數(shù)內(nèi)不會拋擲 岀任何異常。:如果h函數(shù)拋岀異?;蛘遞函數(shù)拋擲出非A或非B類 的異常,這是沒有預料到的,稱其為未料到異常。:異常申述是一種對設計的描述,從而給程序員一 個編程的參照,所以應作為界面,而放在函數(shù)聲 明中,并通過頭文件的形式,擴散到程序員那里。:其次,要使用異常申述,函數(shù)聲明和
30、函數(shù)定義中 的異常申述必須保持一致,否則無法一一對應。Visual C+ Program Design沒有申述的函數(shù),默認為任何拋擲都可穿透該函數(shù)聲明:class A;class B;void fl()throw(A,B); void f2();void f3()throw();對于函數(shù)g中的調(diào)用,可能 捕捉到函數(shù)fl的A和 函數(shù)的E異常拋擲,注:同一個函數(shù),其聲明與 定義中的申述應一致class A; class B;void f1()throw(Af B) if ( ) throw A ();void f2()if ( . . .) throw B ();void f3()throw()i
31、f ( . . .) throw A ();void g() try fl(); f2(); f3();catch(A)cout<<vxexception in An; catch(B)cout<<vexception in Bn;Visual C+ Program Design:如果代碼中沒有徹底捕捉的異常處理,則對于拋 擲的異常,有可能發(fā)生捕捉不住的情況。如向量 的下標溢出時,系統(tǒng)會拋擲一個runtime_error# 常,但許多程序都不屑一捕,因為程序報調(diào)通了, 邏輯可靠,不會岀現(xiàn)下標溢岀的錯誤了。這類異 常只能被系統(tǒng)默認的“強制捕捉器” terminate:捕捉
32、了。Terminate是系統(tǒng)資源,默認操作是系 統(tǒng)的abort函數(shù),從而無條件地終止程序的執(zhí)行。:另外,未料到異常,如果不去理它,被系統(tǒng)截獲 后會轉(zhuǎn)而執(zhí)行unexpected函數(shù),而unexpected函 數(shù)的默認行為是執(zhí)行terminate函數(shù)。女口:Visual C+ Program Design拋擲而無布網(wǎng)捕捉的異常將直逼系統(tǒng)的最后一道防捉不住處理:void f()if(. . . ) throw A;void g()tryf 0;catch(B)cout«NXexception Bn,z;int main()g();throw A將穿透函數(shù)f, g和main,抵達系統(tǒng)的最后一
33、道防線一激發(fā) terminate函數(shù).該函數(shù)調(diào)用引起運行終止的abort函數(shù).最后一道防線的函數(shù)可以由程序員設置.從而規(guī)定其終止前的行為.Visual C+ Program Design可以通過set_term inate函數(shù)修改捕捉不住異常的 默認處理器,從而使得發(fā)生捉不住異常時,被自 定義函數(shù)處理:void myTerminate()cout«uHerelsMyTerminaterT; set_terrninate(myTerminate);set_terminate函數(shù)在頭文件exception中聲明,參 數(shù)務函數(shù)指針void(*)().0Visual C+ Program D
34、esign1 一 licrosoft Visual C c; . YC98Include.EB. H|AII global members | #main讒 | 險臉 |TestABC1 二|Whi32 DebugJ H £! B « 伊怎3 2國鷗駁o <3 A / 2閔隰CRT INP terminate function cdecl set termiitaie曙I Workspace TEStAB( 白.自臼 Source Files J) StdAfx.c卩卩 gjTestABCl.c -S Header Files Bl StdAfx.h 口 Resour
35、ce Files 司 ReadMe.txtfldefine Uendif ttendiftypedef typedef typedef typedefnifndef struct typedef ItendifCRT IHP 【CRT IMP #elseCRT IMP 【CRT IHP 4tendifCRT IMP 【CRT IMP Sifndef _CRTIMP ttendifCRTAPI1uoid (_cdecl uoid (_cdecl uoid (_cdecl uoid (_cdeclerminatefunction)(); *unexpected_function)(); *term
36、inate_handler)(); *unexpected_handler)();_MACEXCEPTION POINTERS;uoid (_cdecl *_se_translator_Function)(unsigned int, struct _EXCEPTION_POINTERS*);_M$C_UER >= 1280_decl5pec(noreturn) uoid _cdecl terminate(u&id> _decl5pec(noreturn) uoid _cdecl un&xp&cted(void);uoid _cdecl terminate(u
37、oid); uoid _cdecl unexpected(uoid);t er mi nate_F unction _cdecltern)inate_Function);unexpected_Function _cdecl set_unexpected(unexpected_Function);MACse translator function cdecl set se translator se translator Function).set terninate: Class罵 FileViSearching for S1827BCannot find the string S1827B.
38、Ej File Edit View Insert BounisChecker Project Build To61s TrueTime TrueCoverage Window Help(4 E 0 fe m U口 園冑硒1027| | Build Debug Find in Files 1 / Find in Files 2 Results | 4 |圄英丿:構(gòu)造函數(shù)正象一個封閉的模塊,輸岀狀態(tài)是一個 新創(chuàng)對象.任何創(chuàng)建過程中的錯誤(例如,動態(tài) 內(nèi)存申請失敗等)都會導致模板的出乎意料.這 時候的狀態(tài)是不能接續(xù)后繼操作的,女口:捆綁對 象的操作因為沒有對象而招致失敗.如果敢于正 常返回,則又招致
39、荒謬的結(jié)果.女口:class Dateint yearmonthF day;void init (int y f int mf int d) if(y<l|m<l|m>12|d<l|d>31) return; /?publie:Date (int y=2 000 f int m=l, int d=l) :year(y) r month(m) r day(d)init ();void print() cout<<year<<''-,<<month<<''-/,<<dAy
40、71;''n;int main()Date ad(2000 f13 r1);ad.print () ;/ 荒謬:月份為13class Dateint year, month, day;void init(int yf int int d) if(y<l|m<l|m>12|d<l|d>31) throw out of range;public:Date(int y=2000 z int m=l, int d=l) :year(y)z month(m) f day(d) init();void print()cout<<yeAr<&l
41、t;''-<<month<<''- «day«unz,;void f()Date(2000,13,1);ad.print();int main()tryf 0 ;/其他操作catch(out_of_rAnge) cout«u對象創(chuàng)建失敗,改換門庭”;異常操作應該恢復到對類對象進行創(chuàng)建和使用以前的狀態(tài).Visual C+ Program Design:構(gòu)造函數(shù)沒有返回類型,無法通過返回值來報告 運行狀態(tài),所以只通過一種非函數(shù)機制的途徑, 即異常機制,來解決構(gòu)造函數(shù)的岀錯問題。Visual C+ Program
42、Design:多重循環(huán)控制中,當某個條件滿足時,需要立刻 退岀所有循環(huán)體時,一般用goto語句反而比較現(xiàn) 實.否則一重一重地退,編程復雜,性能也連 累這是在一個函數(shù)中時的做法:在一個循環(huán)中,遇到一個,當某個條件滿足時, 需要立刻退岀函數(shù)函數(shù)調(diào)用鏈調(diào)用鏈所在的循環(huán) 時,就不能用goto語句,因為不在同一個函數(shù) 中.此時,程序員渴望函數(shù)能奇跡般地跳躍.用 異??刂平Y(jié)構(gòu)便能滿足編程要求.如圖:Visual C+ Program Designc圖156另一種控制結(jié)構(gòu)Visual C+ Program Design:不能說異常發(fā)生一定是一種錯誤,它已經(jīng)成為了 一種有效的控制手段。:異常并非一定是針對錯誤
43、時刻處理。Visual C+ Program Design遞歸函數(shù)本身就是一個深不可測的調(diào)用鏈, 要立刻從調(diào)用鏈中徹底退岀,若走函數(shù)控 制這條線,那么,必須逐個進行函數(shù)返 回.而異??刂瓶梢詫崿F(xiàn)瞬間跳躍.如求解” n皇后問題”,代碼如下: #include<iostream> #include<vector> #include<fstream> usin g namespace std; typedef vector<vector<int> > Mat; void queen(int r, int c, Mat); void prin
44、t(const Mat &m); int main() ifstream in (nque en .in'*); for(int n; in»n;) try Mat m(n, vector<int>(n,0); for(i nt i=0; i<n; +i) quee n(0,i,m); cout«HNoSolutionsnnH;catch(Mat & m) print(m);Visual C+ Program Design void queen(int r, int c, Mat m) mrc = 2; for(int k=1; k<m.size()-r; +k) mr+kc=1; if(c-k>=0) mr+kc-k=1; if(c+k<m.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)管理理論知識考試試題及答案
- 清華大學信息部java面試題及答案
- 環(huán)境工程原理與技術(shù)研究試題
- 設備故障預防技術(shù)試題及答案
- 西方政治制度中的女性角色試題及答案
- 軟件設計師新手必看試題及答案
- 西方國家的環(huán)保政策與國際合作試題及答案
- 客戶參與在項目管理中的重要性試題及答案
- 機電工程的職業(yè)生涯管理策略試題及答案
- 軟件設計師考試工作坊分享試題及答案
- 互聯(lián)網(wǎng)公司民事起訴狀模板
- 數(shù)據(jù)安全及隱私保護協(xié)議
- 科目一急救考試題及答案
- 2025閩教版英語三年級下冊單詞表
- 兩人合伙開燒烤店協(xié)議
- 《石油煉制過程中的常減壓蒸餾技術(shù)》教學課件
- (2025春新版本)部編版七年級語文下冊全冊教案
- GB/T 18282.1-2025醫(yī)療保健產(chǎn)品滅菌化學指示物第1部分:通則
- 華為質(zhì)量管理手冊
- 拆除臨時用電施工方案
- 高級病理學與病理學實驗技術(shù)知到智慧樹章節(jié)測試課后答案2024年秋浙江中醫(yī)藥大學
評論
0/150
提交評論