版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別第五講第五講 運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 rtti的概念的概念 rtti的兩種使用方法的兩種使用方法合理使用合理使用rtti運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別21989年,由于異常處理的引入,年,由于異常處理的引入,c+必須具有運(yùn)必須具有運(yùn)行時(shí)類型識(shí)別能力,于是導(dǎo)致了行時(shí)類型識(shí)別能力,于是導(dǎo)致了 rtti 機(jī)制的誕生。機(jī)制的誕生。rtti 機(jī)制不僅滿足了異常處理的需要,還解決了虛機(jī)制不僅滿足了異常處理的需要,還解決了虛函數(shù)的難題。函數(shù)的難題。“有了有了rtti 機(jī)制之后,系統(tǒng)就能在運(yùn)行時(shí)查詢機(jī)制之后,系統(tǒng)就能在運(yùn)行時(shí)查詢一個(gè)多態(tài)指針或引用指向的具體對(duì)象的類型了。一個(gè)多態(tài)
2、指針或引用指向的具體對(duì)象的類型了?!保╨ippman 語(yǔ))語(yǔ))rtti 機(jī)制的核心:機(jī)制的核心:typeid 運(yùn)算符運(yùn)算符 關(guān)于關(guān)于 rtti先激活先激活rtti:在在project 菜單中,菜單中,選選setting項(xiàng),項(xiàng),單擊單擊c/c+標(biāo)簽,標(biāo)簽,category列表中,列表中,選選c+ language,單擊單擊enable rtti后后 ok.運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 運(yùn)行時(shí)類型識(shí)別(運(yùn)行時(shí)類型識(shí)別(run-time type identification , rtti)是指)是指,在只有一個(gè)指向基類的指針或引用時(shí),確在只有一個(gè)指向基類的指針或引用時(shí),確定所指對(duì)象的準(zhǔn)確類型的操作
3、。定所指對(duì)象的準(zhǔn)確類型的操作。 一般情況下,虛函數(shù)機(jī)制并不需要一個(gè)類的確切一般情況下,虛函數(shù)機(jī)制并不需要一個(gè)類的確切類型,就可以實(shí)現(xiàn)對(duì)那種類型的對(duì)象實(shí)施正確行為。類型,就可以實(shí)現(xiàn)對(duì)那種類型的對(duì)象實(shí)施正確行為。但是,在很多情況下,虛函數(shù)無(wú)法克服本身的不能反但是,在很多情況下,虛函數(shù)無(wú)法克服本身的不能反映確切類型的局限。不可避免要對(duì)對(duì)象類型進(jìn)行動(dòng)態(tài)映確切類型的局限。不可避免要對(duì)對(duì)象類型進(jìn)行動(dòng)態(tài)判斷,也就是動(dòng)態(tài)類型的偵測(cè)識(shí)別。判斷,也就是動(dòng)態(tài)類型的偵測(cè)識(shí)別。1. rtti的概念的概念運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 和很多其他語(yǔ)言一樣,和很多其他語(yǔ)言一樣,c+是一種靜態(tài)類型語(yǔ)言。是一種靜態(tài)類型語(yǔ)言。其數(shù)
4、據(jù)類型是在編譯期就確定的,不能在運(yùn)行時(shí)更改。其數(shù)據(jù)類型是在編譯期就確定的,不能在運(yùn)行時(shí)更改。然而由于面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)性的要求,然而由于面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)性的要求,c+中中的指針或引用的指針或引用(reference)本身的類型,可能與它實(shí)際本身的類型,可能與它實(shí)際代表代表(指向或引用指向或引用)的類型并不一致。我們往往需要將一的類型并不一致。我們往往需要將一個(gè)多態(tài)指針轉(zhuǎn)換為其實(shí)際指向?qū)ο蟮念愋?,就需要知個(gè)多態(tài)指針轉(zhuǎn)換為其實(shí)際指向?qū)ο蟮念愋?,就需要知道運(yùn)行時(shí)的類型信息,這就產(chǎn)生了運(yùn)行時(shí)類型識(shí)別的道運(yùn)行時(shí)的類型信息,這就產(chǎn)生了運(yùn)行時(shí)類型識(shí)別的要求。要求。 運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 上
5、面是一個(gè)典型的類繼承關(guān)系圖,基類在上,派生上面是一個(gè)典型的類繼承關(guān)系圖,基類在上,派生類向下生長(zhǎng)。面向?qū)ο蟪绦蛟O(shè)計(jì)的一般目標(biāo)就是用代類向下生長(zhǎng)。面向?qū)ο蟪绦蛟O(shè)計(jì)的一般目標(biāo)就是用代碼管理指向基類的指針。所以如果想增加一個(gè)新類來(lái)碼管理指向基類的指針。所以如果想增加一個(gè)新類來(lái)擴(kuò)充程序(比如從擴(kuò)充程序(比如從shape中派生出中派生出rhomboid),代碼體),代碼體部分并不受影響。部分并不受影響。 shape circle square triangle運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 在上例中,在上例中,shape接口部分的虛函數(shù)是接口部分的虛函數(shù)是draw(),其目其目的就是讓用戶通過(guò)一個(gè)的就是讓
6、用戶通過(guò)一個(gè)shape指針來(lái)調(diào)用指針來(lái)調(diào)用draw(),draw()在所有的派生類中都被重新定義。由于它是一在所有的派生類中都被重新定義。由于它是一個(gè)虛函數(shù),所以即使是用一個(gè)個(gè)虛函數(shù),所以即使是用一個(gè)shape()型的指針來(lái)調(diào)用型的指針來(lái)調(diào)用它,它仍然會(huì)被正確調(diào)用。創(chuàng)建一個(gè)特定的對(duì)象它,它仍然會(huì)被正確調(diào)用。創(chuàng)建一個(gè)特定的對(duì)象(circle、square、triangle),取其地址并把它映射),取其地址并把它映射到到shape*(忘掉對(duì)象的實(shí)際類型),然后在程序的其(忘掉對(duì)象的實(shí)際類型),然后在程序的其它地方使用這個(gè)匿名指針?biāo)胤绞褂眠@個(gè)匿名指針這種從多個(gè)派生類到基這種從多個(gè)派生類到基類的映射
7、叫做類的映射叫做向上映射向上映射。運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 假如在編程中遇到了特殊的需求,需要知道一假如在編程中遇到了特殊的需求,需要知道一個(gè)一般指針的準(zhǔn)確類型,該怎么辦?個(gè)一般指針的準(zhǔn)確類型,該怎么辦? 比如,假設(shè)允許我們的用戶將任一形狀變成紫比如,假設(shè)允許我們的用戶將任一形狀變成紫色來(lái)表示加亮。用這種方法,他們可以發(fā)現(xiàn)屏幕上的色來(lái)表示加亮。用這種方法,他們可以發(fā)現(xiàn)屏幕上的所有三角形都被加亮。我們可能自然地想到用虛函數(shù),所有三角形都被加亮。我們可能自然地想到用虛函數(shù),像像turncolorifyouarea ( ),它允許一些種類顏色的枚,它允許一些種類顏色的枚舉型參數(shù)和舉型參數(shù)和sha
8、pe:circle、shape:square或或shape:triangle參數(shù)。參數(shù)。 運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 為了解決這種問(wèn)題,多數(shù)類庫(kù)設(shè)計(jì)者會(huì)把虛函為了解決這種問(wèn)題,多數(shù)類庫(kù)設(shè)計(jì)者會(huì)把虛函數(shù)放在基類中,使運(yùn)行時(shí)返回特定對(duì)象的類型信息。數(shù)放在基類中,使運(yùn)行時(shí)返回特定對(duì)象的類型信息。我們可能見(jiàn)過(guò)一些名字為我們可能見(jiàn)過(guò)一些名字為isa( )和和typeof() 之類的成之類的成員函數(shù),這些就是開(kāi)發(fā)商定義的員函數(shù),這些就是開(kāi)發(fā)商定義的rtti函數(shù)。使用這函數(shù)。使用這些函數(shù),當(dāng)處理一個(gè)對(duì)象列表時(shí)就可以說(shuō):些函數(shù),當(dāng)處理一個(gè)對(duì)象列表時(shí)就可以說(shuō):“如果這如果這個(gè)對(duì)象是個(gè)對(duì)象是triangle類的
9、,就把它變成紫色。類的,就把它變成紫色?!边\(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別9使用使用typeid 運(yùn)算符的前提:必須有運(yùn)算符的前提:必須有typeinfo類的支持。類的支持。該類為所有的內(nèi)置類型和多態(tài)類型的對(duì)象保存了運(yùn)行時(shí)類型信該類為所有的內(nèi)置類型和多態(tài)類型的對(duì)象保存了運(yùn)行時(shí)類型信息。它息。它在頭文件在頭文件 中定義的。中定義的。常用該類的常用該類的四個(gè)成員函數(shù)四個(gè)成員函數(shù):測(cè)試兩個(gè)對(duì)象的類型是否相同測(cè)試兩個(gè)對(duì)象的類型是否相同: bool operator =(const typeinfo &ob)const; bool operator !=(const typeinfo &ob
10、)const; 返回被測(cè)對(duì)象的類型名返回被測(cè)對(duì)象的類型名: const char * name()const;判斷兩個(gè)對(duì)象定義的前后關(guān)系:判斷兩個(gè)對(duì)象定義的前后關(guān)系: bool before(const typeinfo & ob)const;typeinfo類類運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別10 typeid(對(duì)象名對(duì)象名/類型名類型名) : 返回一個(gè)返回一個(gè)typeinfo類的對(duì)象類的對(duì)象,記錄著目標(biāo)類的類型。記錄著目標(biāo)類的類型。 static_cast(源對(duì)象源對(duì)象):將對(duì)象靜態(tài)轉(zhuǎn)換為目將對(duì)象靜態(tài)轉(zhuǎn)換為目標(biāo)類型標(biāo)類型。 dynamic_cast(源對(duì)象源對(duì)象):若源對(duì)象若源對(duì)象與與
11、目標(biāo)類目標(biāo)類型型存在存在 is - a 關(guān)系,則完成轉(zhuǎn)換,否則失敗。關(guān)系,則完成轉(zhuǎn)換,否則失敗。 將父將父類的指針變?yōu)樽宇惖闹羔?。類的指針變?yōu)樽宇惖闹羔?。所涉及的運(yùn)算符所涉及的運(yùn)算符 運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 2. rtti的兩種使用方法的兩種使用方法: 使用使用rtti有兩種方法。第一種就像有兩種方法。第一種就像sizeof(),它看上就像一,它看上就像一個(gè)函數(shù)。但實(shí)際上它是由編譯器實(shí)現(xiàn)的。個(gè)函數(shù)。但實(shí)際上它是由編譯器實(shí)現(xiàn)的。typeid()帶有一個(gè)參數(shù),帶有一個(gè)參數(shù),它可以是一個(gè)對(duì)象引用或指針,返回全局它可以是一個(gè)對(duì)象引用或指針,返回全局typeinfo類的常量對(duì)象類的常量對(duì)象的一個(gè)引
12、用??梢杂眠\(yùn)算符的一個(gè)引用。可以用運(yùn)算符“= =”和和“!=”來(lái)互相比較這些對(duì)象。來(lái)互相比較這些對(duì)象。也可以用也可以用name()來(lái)獲得類型的名稱。注意,如果給來(lái)獲得類型的名稱。注意,如果給typeid()傳遞傳遞一個(gè)一個(gè)shape*型參數(shù),它會(huì)認(rèn)為類型為型參數(shù),它會(huì)認(rèn)為類型為shape*,所以如果想知道,所以如果想知道一個(gè)指針?biāo)笇?duì)象的精確類型,我們必須逆向引用這個(gè)指針。一個(gè)指針?biāo)笇?duì)象的精確類型,我們必須逆向引用這個(gè)指針。比如,比如,s是個(gè)是個(gè)shape* ,那么:那么: cout typeid(*s).name()endl; 將顯示出將顯示出s所指向的對(duì)象類型。所指向的對(duì)象類型。運(yùn)行時(shí)類
13、型識(shí)別運(yùn)行時(shí)類型識(shí)別 為了保持一致性,為了保持一致性,typeid()也可以用于內(nèi)部類型,也可以用于內(nèi)部類型,所以下面的表達(dá)式結(jié)果為所以下面的表達(dá)式結(jié)果為true: typeid(47) = typeid(int) typeid(0) = typeid(int) int i; typeid(i) = typeid(int) typeid(&i) =typeid(int*)運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別13可以用可以用typeid 檢查基本類型和非多態(tài)類型:檢查基本類型和非多態(tài)類型: #include #include #include using namespace std;typede
14、f unsigned int uint ;void func() cout typeid(uint).name()endl; cout typeid(string).name()endl;顯示:顯示:“unsigned int”“string”運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 rtti的第二個(gè)用法叫的第二個(gè)用法叫“安全類型向下映射安全類型向下映射”。之所以用之所以用“向下映射向下映射”這個(gè)詞也是由于類繼承的排列這個(gè)詞也是由于類繼承的排列順序。如果映射一個(gè)順序。如果映射一個(gè)circle*到到shape*叫叫向上映射向上映射的話,的話,那么將一個(gè)那么將一個(gè)shape*映射成一個(gè)映射成一個(gè)circle*
15、就叫就叫向下映射向下映射了。了。當(dāng)然一個(gè)當(dāng)然一個(gè)circle*也是一個(gè)也是一個(gè)shape*,編譯器允許任意的,編譯器允許任意的向上映射,但一個(gè)向上映射,但一個(gè)shape*不一定就是不一定就是circle*,所以編,所以編譯器在沒(méi)有明確的類型映射時(shí)并不允許我們完成一個(gè)譯器在沒(méi)有明確的類型映射時(shí)并不允許我們完成一個(gè)向下映射任務(wù)。向下映射任務(wù)。運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 向下映射的一般方法是:創(chuàng)建一個(gè)函數(shù)來(lái)試著將向下映射的一般方法是:創(chuàng)建一個(gè)函數(shù)來(lái)試著將shape*指派為一個(gè)指派為一個(gè)circle * (在本例中在本例中),檢查執(zhí)行過(guò)程中的,檢查執(zhí)行過(guò)程中的數(shù)據(jù)類型。如果這個(gè)函數(shù)返回一個(gè)非空地址,
16、則成功;如數(shù)據(jù)類型。如果這個(gè)函數(shù)返回一個(gè)非空地址,則成功;如果返回果返回null,說(shuō)明我們并沒(méi)有一個(gè),說(shuō)明我們并沒(méi)有一個(gè)circle*對(duì)象。對(duì)象。 c+的的rtti的的“安全類型向下映射安全類型向下映射”就是按照這種就是按照這種“試探映射試探映射”函數(shù)的格式,但它(非常合理地)用模板語(yǔ)函數(shù)的格式,但它(非常合理地)用模板語(yǔ)法來(lái)產(chǎn)生這個(gè)特殊的動(dòng)態(tài)映射函數(shù)(法來(lái)產(chǎn)生這個(gè)特殊的動(dòng)態(tài)映射函數(shù)(dynamic_cast)所以)所以本例變成:本例變成: shape* sp=new circle; circle* cp=dynamic_cast(sp); if(cp) cout“cast successfu
17、l”;運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 如果想算出各種如果想算出各種shape的數(shù)目,可以使用下面的的數(shù)目,可以使用下面的框架:框架: circle* cp=dynamic_cast(sh) square* sp=dynamic_cast(sh) triangle* tp=dynamic_cast(sh) 當(dāng)然這是方法之一。我們還可以在各個(gè)類型中放當(dāng)然這是方法之一。我們還可以在各個(gè)類型中放置一個(gè)靜態(tài)數(shù)據(jù)成員,并在構(gòu)造函數(shù)中對(duì)它自增計(jì)置一個(gè)靜態(tài)數(shù)據(jù)成員,并在構(gòu)造函數(shù)中對(duì)它自增計(jì)數(shù)。這樣我們可以使用靜態(tài)數(shù)據(jù)成員和動(dòng)態(tài)映射兩數(shù)。這樣我們可以使用靜態(tài)數(shù)據(jù)成員和動(dòng)態(tài)映射兩種方法結(jié)合起來(lái)計(jì)算種方法結(jié)合起來(lái)計(jì)算
18、shape的個(gè)數(shù)。的個(gè)數(shù)。運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 rtti允許我們用一個(gè)匿名的多態(tài)指針來(lái)發(fā)現(xiàn)類型允許我們用一個(gè)匿名的多態(tài)指針來(lái)發(fā)現(xiàn)類型信息,所以它常常被初學(xué)者濫用,因?yàn)樗赡茉谔摵畔?,所以它常常被初學(xué)者濫用,因?yàn)樗赡茉谔摵瘮?shù)完成之前就有意義了。數(shù)完成之前就有意義了。 對(duì)于許多有過(guò)程編程背景的人來(lái)說(shuō),要他們不把對(duì)于許多有過(guò)程編程背景的人來(lái)說(shuō),要他們不把程序組織成為一組程序組織成為一組switch語(yǔ)句是非常困難的。他們可語(yǔ)句是非常困難的。他們可能會(huì)用能會(huì)用rtti完成這些,但這樣會(huì)在代碼開(kāi)發(fā)維護(hù)階段完成這些,但這樣會(huì)在代碼開(kāi)發(fā)維護(hù)階段丟失多態(tài)性的非常重要的價(jià)值。丟失多態(tài)性的非常重要的價(jià)值
19、。 c+的意圖是:盡可能地使用虛函數(shù),必要時(shí)才的意圖是:盡可能地使用虛函數(shù),必要時(shí)才使用使用rtti。運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 當(dāng)然,要想充分使用虛函數(shù),我們必須控制基當(dāng)然,要想充分使用虛函數(shù),我們必須控制基類的定義。但隨著程序的擴(kuò)大,我們可能發(fā)現(xiàn)基類類的定義。但隨著程序的擴(kuò)大,我們可能發(fā)現(xiàn)基類并沒(méi)有我們想要的虛函數(shù),如果基類來(lái)自類庫(kù)或其并沒(méi)有我們想要的虛函數(shù),如果基類來(lái)自類庫(kù)或其他由別人控制的來(lái)源,就可以用他由別人控制的來(lái)源,就可以用rtti作為一種解決作為一種解決辦法:我們可以繼承一個(gè)新類并加上我們的成員函辦法:我們可以繼承一個(gè)新類并加上我們的成員函數(shù)。在代碼的其他地方我們可以檢測(cè)到我
20、們的新增數(shù)。在代碼的其他地方我們可以檢測(cè)到我們的新增類型和調(diào)用的那個(gè)成員函數(shù)。這不會(huì)破壞多態(tài)性和類型和調(diào)用的那個(gè)成員函數(shù)。這不會(huì)破壞多態(tài)性和程序邏輯的可擴(kuò)展性。程序邏輯的可擴(kuò)展性。運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別 rtti有時(shí)可以解決效率問(wèn)題。如果代碼用有時(shí)可以解決效率問(wèn)題。如果代碼用一種好的方法使用多態(tài)機(jī)制,但結(jié)果是這種通一種好的方法使用多態(tài)機(jī)制,但結(jié)果是這種通用代碼對(duì)某個(gè)對(duì)象起反作用,使其運(yùn)行效率低用代碼對(duì)某個(gè)對(duì)象起反作用,使其運(yùn)行效率低下。我們可以用下。我們可以用rtti將這種類型找出來(lái),并將這種類型找出來(lái),并寫(xiě)出針對(duì)特定情況的代碼以提高效率。寫(xiě)出針對(duì)特定情況的代碼以提高效率。運(yùn)行時(shí)類型識(shí)別
21、運(yùn)行時(shí)類型識(shí)別20dynamic_cast運(yùn)算符可完成兩個(gè)方向的轉(zhuǎn)換:運(yùn)算符可完成兩個(gè)方向的轉(zhuǎn)換: upcast : 能將派生類的指針、引用轉(zhuǎn)換成基類類能將派生類的指針、引用轉(zhuǎn)換成基類類型。(可以用類型兼容規(guī)則隱含的進(jìn)行)型。(可以用類型兼容規(guī)則隱含的進(jìn)行) downcast :將基類的指針、引用轉(zhuǎn)換成派生類:將基類的指針、引用轉(zhuǎn)換成派生類類型。如果確屬同一類族,且是公有派生,則轉(zhuǎn)換成類型。如果確屬同一類族,且是公有派生,則轉(zhuǎn)換成功,否則失敗,失敗將拋出系統(tǒng)的功,否則失敗,失敗將拋出系統(tǒng)的bad_cast類型異類型異常。常。注意:注意: dynamic_cast只可轉(zhuǎn)換指針或引用,不可只可轉(zhuǎn)換
22、指針或引用,不可作用于對(duì)象。作用于對(duì)象。dynamic_cast運(yùn)算符功能運(yùn)算符功能 運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別21 為了支持dynamic_cast運(yùn)算符,系統(tǒng)必須維護(hù)一棵繼承樹(shù),即base class table 模型。通過(guò)遍歷該繼承樹(shù)來(lái)確定被轉(zhuǎn)換對(duì)象和目標(biāo)類型間是否存在 is-a 關(guān)系。這種“模糊匹配”的能力系統(tǒng)為之付出了時(shí)空代價(jià),也正是rtti的魅力所在。而typeid和虛函數(shù)則屬“精確匹配”,無(wú)需額外開(kāi)銷。dynamic_cast的機(jī)制的機(jī)制運(yùn)行時(shí)類型識(shí)別運(yùn)行時(shí)類型識(shí)別22先激活先激活rtti;對(duì)象所屬類型必須是多態(tài)類族;對(duì)象所屬類型必須是多態(tài)類族;若使用若使用dynamic_cast轉(zhuǎn)換一個(gè)引用,則要使用異轉(zhuǎn)換一個(gè)引用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 政治課件教學(xué)課件
- 設(shè)計(jì)優(yōu)化咨詢服務(wù)合同模板
- 電纜材料決算合同模板
- 食堂蔬菜供應(yīng)合同模板
- 生產(chǎn)交付合同模板
- 食物供應(yīng)合同模板
- 鍋爐購(gòu)銷合同模板
- 車貸合同范本
- 船只購(gòu)買合同模板
- 定制類柜子合同模板
- 2024年公路水運(yùn)交通安全員C證從業(yè)資格證考試題庫(kù)含答案
- 2022-2023學(xué)年北京市西城區(qū)三帆中學(xué)七年級(jí)(上)期中數(shù)學(xué)試卷【含解析】
- 七年級(jí)上冊(cè)數(shù)學(xué)第一次月考試卷分析
- 給稅務(wù)局的情況說(shuō)明
- 陸空通話(定稿)
- 數(shù)據(jù)中心配置清單及報(bào)價(jià)
- 挖掘機(jī)檢驗(yàn)報(bào)告.doc
- 拌合站設(shè)備安裝實(shí)施方案
- 如何指導(dǎo)學(xué)生創(chuàng)作科學(xué)微電影
- 歐姆龍PLC指令集講義
- 印刷廠技術(shù)參數(shù)一覽表
評(píng)論
0/150
提交評(píng)論