C++primer學(xué)習(xí)筆記_第1頁(yè)
C++primer學(xué)習(xí)筆記_第2頁(yè)
C++primer學(xué)習(xí)筆記_第3頁(yè)
C++primer學(xué)習(xí)筆記_第4頁(yè)
C++primer學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C+ Primer第一章 開(kāi)始1、在 C+中 動(dòng)作被稱為表達(dá)式 expression 以分號(hào)結(jié)尾的表達(dá)式被稱作語(yǔ)句 statement,C+中最小的程序單元是語(yǔ)句。2、函數(shù)由四部分組成 返回類(lèi)型 函數(shù)名 參數(shù)表 以及函數(shù)體 前三部分合起來(lái)稱為函數(shù)原型 function prototype。3、錯(cuò)誤類(lèi)型:語(yǔ)義錯(cuò)誤,語(yǔ)法錯(cuò)誤。4、頭文件通過(guò) include 預(yù)處理器指示符 preprocessor include directive 而成為我們程序的一部分 預(yù)處理器指示符用 # 號(hào)標(biāo)識(shí)。由于嵌套包含文件的原因 一個(gè)頭文件可能,會(huì)被多次包含在一個(gè)源文件中 條件指示符可防止這種頭文件的重復(fù)處理 。例如

2、:#ifndef BOOKSTORE_H#define BOOKSTORE_H/* Bookstore.h 的內(nèi)容 */#endif5、assert()是 C 語(yǔ)臺(tái)標(biāo)準(zhǔn)庫(kù)中提供的一個(gè)通用預(yù)處理器宏 在代碼中常利用 assert()來(lái)判斷一個(gè)必需的前提條件 以便程序能夠正確執(zhí)行。6、C+的輸入/輸出功能由輸入/輸出流 iostream 庫(kù)提供 輸入/輸出流庫(kù)是 C+中一個(gè)面向?qū)ο蟮念?lèi)層次結(jié)構(gòu) 也是標(biāo)準(zhǔn)庫(kù)的一部分。7、iostream 庫(kù)也支持文件的輸入和輸出,必須包含:#include 。為了打開(kāi)一個(gè)輸出文件 我們必須聲明一個(gè) ofstream 類(lèi)型的對(duì)象:ofstream outfile( n

3、ame-of-file );為了測(cè)試是否已經(jīng)成功地打開(kāi)了一個(gè)文件 我們可以寫(xiě)出這樣的代碼if ( ! outfile ) / 如文件不能打開(kāi)值為 falsecerr Sorry! We were unable to open the file!n;類(lèi)似地 為了打開(kāi)一個(gè)文件供輸入 我們必須聲明一個(gè) ifstream 類(lèi)型的對(duì)象ifstream infile( name of file );if ( ! infile )cerr Sorry! We were unable to open the file!n;第二章 C+瀏覽。 1、為什么內(nèi)置數(shù)組類(lèi)型不支持?jǐn)?shù)組之間的賦值 支持這種操作需要什么信息

4、?答:數(shù)組具有退化性,數(shù)組在這里退化為指針而不表示整個(gè)數(shù)組。而數(shù)組退化得到的指針是常量,因此數(shù)組無(wú)法作為operator=的左操作數(shù);組類(lèi)型(元素類(lèi)型和長(zhǎng)度)完全相同或者元素類(lèi)型相同但左操作數(shù)的長(zhǎng)度大于等于右操作數(shù)的長(zhǎng)度。 2、你認(rèn)為作為一等公民的數(shù)組應(yīng)該支持什么操作?數(shù)組初始化、數(shù)組比較、數(shù)組賦值、數(shù)組大小查詢、數(shù)組索引范圍檢驗(yàn)等3、構(gòu)造函數(shù),析構(gòu)函數(shù)的作用。類(lèi)的構(gòu)造函數(shù)主要用來(lái)初始化類(lèi)對(duì)象的數(shù)據(jù)成員 析構(gòu)函數(shù)主要負(fù)責(zé)釋放類(lèi)對(duì)象在生命期內(nèi)申請(qǐng)到的所有資源。4、異常設(shè)計(jì)(catch捕捉的類(lèi)型要與throw的類(lèi)型一樣)。5、名字空間的使用,它獨(dú)立于全局名字空間 我們可以在里面放一些希望聲明在函數(shù)

5、或類(lèi)之外的實(shí)體 名字空間井不改變其中的聲明的意義 只是改變了它們的可視性。第三章 C+數(shù)據(jù)類(lèi)型1、文字常量:“F”,“f”,“L”,“l(fā)”后綴只能用在十進(jìn)制形式中。文字常量是不可尋址的。2、變量:變量為我們提供了一個(gè)有名字的內(nèi)存存儲(chǔ)區(qū),因此可尋址,同時(shí)可以通過(guò)程序?qū)ζ溥M(jìn)行讀 寫(xiě)和處理。注意命名規(guī)則(如不能以數(shù)字開(kāi)頭、關(guān)鍵字)。3、指針類(lèi)型:指針持有另一個(gè)對(duì)象的地址,使我們能夠間接地操作這個(gè)對(duì)象。指針都是4個(gè)字節(jié)。注意指針的使用。4、字符串類(lèi)型:學(xué)會(huì)所有字符串處理函數(shù)的使用。特別注意字符串指針,字符指針的操作。5、const限定修飾符:被const定義的變量必須初始化,因?yàn)闆](méi)法改變。Const對(duì)

6、象的地址只能賦值給const類(lèi)型的指針。6、引用類(lèi)型:引用必須被初始化,因?yàn)橐坏┮帽欢x,也就不能修改。另外注意const類(lèi)型的引用的不同。如:const int ival = 1024;/ 錯(cuò)誤: 要求一個(gè) const 引用int *&pi_ref = &ival;const int ival = 1024;/ 仍然錯(cuò)誤const int *&pi_ref = &ival;如果我們從右向左讀這個(gè)定義會(huì)發(fā)現(xiàn) pi_ref 是一個(gè)指向定義為 const 的 int 型對(duì)象的指針,引用不是指向一個(gè)常量 而是指向一個(gè)非常量指針 指針指向一個(gè) const 對(duì)象。正確的定義如下:const int i

7、val = 1024;/ ok: 這是可以被編譯器接受的const int *const &pi_ref = &ival;7、bool類(lèi)型:它不能被聲明為 signed unsigned short 或 long; 當(dāng)表達(dá)式需要一個(gè)算術(shù)值時(shí) 布爾對(duì)象(如 found)和布爾文字都被隱式地提升成 int(正如下面的例子) false 變成 0 而 true 變成 1。8、枚舉類(lèi)型:枚舉類(lèi)型用關(guān)鍵字 enum 加上一個(gè)自選的枚舉類(lèi)型名來(lái)定義 類(lèi)型名后面跟一個(gè)用花括號(hào)括起來(lái)的枚舉成員列表 枚舉成員之間用逗號(hào)分開(kāi) 在缺省情況下 第一個(gè)枚舉成員被賦以值 0 后面的每個(gè)枚舉成員依次比前面的大 1。如:/

8、point2d = 2, point2w = 3, point3d = 3, point3w = 4enum Points point2d = 2, point2w, point3d = 3, point3w ;9、 數(shù)組類(lèi)型:一個(gè)數(shù)組不能被另外一個(gè)數(shù)組初始化 也不能被賦值給另外一個(gè)數(shù)組 而且 C+不允許聲明一個(gè)引用數(shù)組(即由引用組成的數(shù)組);數(shù)組維數(shù)的指定必須是常量表達(dá)式。10、 vector容器類(lèi):與數(shù)組不同,可以進(jìn)行賦值。具有兩種不同形式(數(shù)組形式和STL形式,區(qū)別在與是否固定大?。?。典型的對(duì)vector容器的操作是采用迭代器。同時(shí)初始化時(shí)特別注意。如:Vector arr = 1,2,

9、3;/錯(cuò)誤,不能以該中方式,進(jìn)行賦值。11、復(fù)數(shù)類(lèi)型: 復(fù)數(shù) complex number 類(lèi)是標(biāo)準(zhǔn)庫(kù)的一部分,必須包含其相關(guān)的頭文件#include 。每個(gè)復(fù)數(shù)都有兩部分 實(shí)數(shù)部分和虛數(shù)部分。復(fù)數(shù)支持加 減 乘 除和相等比較。12、typedef名字:使用例子如:typedef vector vec_int;vec_int vec1( 10 );作用:降低聲明復(fù)雜度。13、valotile修飾符:禁止優(yōu)化的作用。14、pair類(lèi)型:它可以在單個(gè)對(duì)象內(nèi)部把相同類(lèi)型或不同類(lèi)型的兩個(gè)值關(guān)聯(lián)起來(lái) 為了使用 pair 類(lèi)必須包含下面的頭文件:#include 例如:pair author( James

10、, Joyce );15、類(lèi)類(lèi)型:就是自定義的類(lèi)類(lèi)型。第四章 表達(dá)式1、 什么是表達(dá)式:表達(dá)式由一個(gè)或多個(gè)操作數(shù) operand 構(gòu)成 最簡(jiǎn)單的表達(dá)式由一個(gè)文字常量或一個(gè)對(duì)象構(gòu)成。注意操作符一元、二元、多元。2、 算術(shù)操作符:%,/等。注意上溢、下溢。3、 等于、關(guān)系和邏輯操作符:操作結(jié)果都是bool。4、 賦值操作符:=。注意左值與右值的區(qū)別。5、 遞增遞減:+,-。注意前自增自減與后自增自減的區(qū)別。6、 復(fù)數(shù)操作:算術(shù)數(shù)據(jù)類(lèi)型不能直接被一個(gè)復(fù)數(shù)類(lèi)對(duì)象初始化或賦值 例如 下列代碼將導(dǎo)致編譯錯(cuò)誤/ 錯(cuò)誤: 從復(fù)數(shù)到內(nèi)置算術(shù)數(shù)據(jù)類(lèi)型之間/ 并沒(méi)有隱式轉(zhuǎn)換支持double dval = compl

11、ex_obj;實(shí)部虛部的讀?。篸ouble re = complex_obj.real();double im = complex_obj.imag();或者用等價(jià)的非成員語(yǔ)法/ 等價(jià)于上面的成員語(yǔ)法double re = real( complex_obj );double im = imag( complex_obj );*:同時(shí)支持直接輸出。7、 條件操作符:if()。8、 sizeof操作符:siseof 操作符的作用是返回一個(gè)對(duì)象或類(lèi)型名的字節(jié)長(zhǎng)度。同時(shí)sizeof是在編譯時(shí)刻計(jì)算,所以是常量表達(dá)式。而且它有以下三種形式:sizeof (type name );sizeof ( ob

12、ject );sizeof object;9、 new和delete表達(dá)式:new和delete成對(duì)出現(xiàn),且new的對(duì)象是在堆中。另外還有一個(gè)特點(diǎn)就是new出來(lái)的對(duì)象都是未命名的。10、逗號(hào)操作符:逗號(hào)表達(dá)式的結(jié)果是最右邊表達(dá)式的值。11、位操作符:12、bitset操作:13、優(yōu)先級(jí):主要是符號(hào)也運(yùn)算優(yōu)先級(jí)。14、類(lèi)型轉(zhuǎn)換:一、隱式轉(zhuǎn)換:如:int num = 3.14;二、算術(shù)轉(zhuǎn)換:如:int+float+double = double;三、顯示轉(zhuǎn)換:如:static_cast四、舊式強(qiáng)制轉(zhuǎn)換:如:int ival = (int) 3.14159;15、棧類(lèi)實(shí)例:就是把前面的知識(shí)用在一個(gè)簡(jiǎn)

13、單類(lèi)里面進(jìn)行實(shí)現(xiàn),驗(yàn)證。第五章 語(yǔ)句1、 簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句:簡(jiǎn)單語(yǔ)句:如:int num =5。復(fù)合語(yǔ)句:一對(duì)花括號(hào)括起來(lái)的語(yǔ)句。2、聲明語(yǔ)句:如:int ivar;注意聲明的局部性。3、if語(yǔ)句:按條件執(zhí)行。4、switch語(yǔ)句:選擇語(yǔ)句。5、for語(yǔ)句:循環(huán)語(yǔ)句。6、while語(yǔ)句:循環(huán)語(yǔ)句。7、do while 語(yǔ)句:循環(huán)語(yǔ)句。8、break語(yǔ)句:結(jié)束循環(huán)。9、continue語(yǔ)句:結(jié)束本次循環(huán)。10、goto語(yǔ)句:跳轉(zhuǎn)語(yǔ)句,可以實(shí)現(xiàn)循環(huán)。如: A: goto A;第六章 抽象容器類(lèi)型1、 我們的文本查詢系統(tǒng):分析該系統(tǒng)的需要。2、 Vector還是list:vector內(nèi)存連續(xù),隨機(jī)

14、訪問(wèn)效率高;list內(nèi)存不連續(xù),隨機(jī)添加刪除效率高。兩者相比,數(shù)據(jù)越大越復(fù)雜,vector效率就越低,list就越高。下面是選擇順序容器類(lèi)型的一些準(zhǔn)則:(1)如果我們需要隨機(jī)訪問(wèn)一個(gè)容器 則 vector 要比 list 好得多(2)如果我們已知要存儲(chǔ)元素的個(gè)數(shù) 則 vector 又是一個(gè)比 list 好的選擇(3)如果我們需要的不只是在容器兩端插入和刪除元素則 list 顯然要比 vector 好3、 Vector怎樣自己增長(zhǎng):當(dāng)vector被占滿后,繼續(xù)插入元素時(shí)候,就會(huì)分配二倍與當(dāng)前容量大小的內(nèi)存。數(shù)據(jù)越大越復(fù)雜,vector效率就越低-如:4、 定義一個(gè)順序容器:能夠定義的容器的類(lèi)型有

15、三個(gè)限制:元素類(lèi)型必須支持等于操作符。元素類(lèi)型必須支持小于操作符 前面討論的所有關(guān)系操作符都用這兩個(gè)操作符來(lái)實(shí)現(xiàn)。元素類(lèi)型必須支持一個(gè)缺省值。5、 迭代器:迭代器 iterator 提供了一種一般化的方法 對(duì)順序或關(guān)聯(lián)容器類(lèi)型中的每個(gè)元素進(jìn)行連續(xù)訪問(wèn)。每種容器類(lèi)型都提供一個(gè) begin()和一個(gè) end()成員函數(shù)*:begin()返回一個(gè) iterator 它指向容器的第一個(gè)元素*:end()返回一個(gè) iterator 它指向容器的末元素的下一個(gè)位置6、 順序容器操作:插入,刪除等操作。如:push_back(),pop_back(),insert(),erase(),swap();互換:如

16、果兩個(gè)容器的長(zhǎng)度不同 則容器的長(zhǎng)度就被重新設(shè)置 且等于被拷貝容器的長(zhǎng)度7、 存儲(chǔ)文本行:一次讀取一行,getline,然后進(jìn)行單詞拆分。8、 找到一個(gè)子串: string name( AnnaBelle );int pos = name.find( Anna );if ( pos = string:npos )cout Anna not found!n;else cout Anna found at pos: pos endl;pos = name.find_first_of( numerics, pos )-說(shuō)明:在name字符串里面查找出現(xiàn)numberics里面任何一個(gè)字符首次出現(xiàn)的位置,

17、從name的pos位置開(kāi)始查找。沒(méi)有則返回-1.pos = name.find_last_of( numerics, pos )-說(shuō)明:在name字符串里面查找出現(xiàn)numberics里面任何一個(gè)字符最后一次出現(xiàn)的位置,從name的pos位置開(kāi)始查找。沒(méi)有則返回-1.9、 處理標(biāo)點(diǎn)符號(hào):處理標(biāo)點(diǎn)符號(hào)跟處理空格類(lèi)似。10、任意其他格式的字符串:string字符串的compare和replace等函數(shù)的使用問(wèn)題。11、其他string操作:erase,insert,find,append,assign等操作。12、生成文本位置map:map的定義如:map word_count; 訪問(wèn)map的int

18、值方法:int age=word_count“xiafusen”;但是如果map中不存在”xiafusen”這樣的鍵值,就會(huì)發(fā)生新插入一個(gè)一”xiafsen”為鍵值,0為age的一對(duì)map值。為了避免這樣的事情發(fā)生,則必須要先知道你面是否存在鍵值”xiafusen” 方法判斷word_count.count( xiafusen )返回值;或則使用find函數(shù)。如:int count = 0;map:iterator it = word_count.find( wrinkles );if ( it != word_count.end() )count = (*it).second; 對(duì)map的迭

19、代就像對(duì)vector的迭代是一樣的。Begin、end等。訪問(wèn)第一個(gè)元素為:對(duì)象.frist,訪問(wèn)第二個(gè)元素為:對(duì)象.second。13、 創(chuàng)建單詞排序集:注意set與vector的區(qū)別。Set中不存在相同的元素存在。14、 完整的程序:程序的實(shí)現(xiàn)代碼。15、 mutilmap,mutilset:map 和 set 只能包含每個(gè)鍵的單個(gè)實(shí)例 而 multiset 和 multimap 允許要被存儲(chǔ)的鍵出現(xiàn)多次。因此不支持下標(biāo)操作。16、棧:先進(jìn)后出17、對(duì)列和優(yōu)先級(jí)隊(duì)列:先進(jìn)先出。標(biāo)準(zhǔn)庫(kù)提供兩種隊(duì)列-FIFO隊(duì)列和優(yōu)先級(jí)隊(duì)列。18、回顧istack類(lèi):解除某些限制,重寫(xiě)某些函數(shù)。第七章 函數(shù)1

20、、概述:函數(shù)返回值,函數(shù)參數(shù),函數(shù)體,函數(shù)名。函數(shù)的聲明描述了函數(shù)的接口,如:參數(shù)列表,返回值等。2、函數(shù)原型: (1)函數(shù)返回值:函數(shù)返回類(lèi)型可以是預(yù)定義類(lèi)型;如 int 或 double。 復(fù)合類(lèi)型;如 int&或 double*280。用戶定義類(lèi)型;如枚舉 類(lèi)或 void 后者意指函數(shù)不返回值。 (2)函數(shù)參數(shù)表:不能省略,逗號(hào)隔開(kāi)。 (3)參數(shù)類(lèi)型檢查:每個(gè)函數(shù)調(diào)用的實(shí)參在編譯鏈接是都會(huì)經(jīng)過(guò)參數(shù)類(lèi)型檢查。3、參數(shù)傳遞:所有的函數(shù)都使用在程序運(yùn)行棧 run-time stack 中分配的存儲(chǔ)區(qū) 該存儲(chǔ)區(qū)一直保持與該函數(shù)相關(guān)聯(lián) 直到函數(shù)結(jié)束為止。(1)引用參數(shù):第一種用法:像 swap()

21、的情況 它必須將一個(gè)參數(shù)改變成指針來(lái)允許改變實(shí)參的值時(shí)就比較合適。第二種普遍用法是向主調(diào)函數(shù)返回額外的結(jié)果 。第三種用法是向函數(shù)傳遞大型類(lèi)對(duì)象,避免額外的負(fù)責(zé)帶來(lái)的開(kāi)銷(xiāo)。(2)應(yīng)用參數(shù)和指針參數(shù)的關(guān)系:應(yīng)用必須被初始化指向一個(gè)對(duì)象,而指針并不必須要初始化。(3)數(shù)組參數(shù):永遠(yuǎn)不可能按值傳遞,另外聲明時(shí)與數(shù)組長(zhǎng)度無(wú)關(guān)。(4)抽象容器類(lèi)參數(shù):如:void show(vector vstr);(5)缺省實(shí)參:char *screenInit( int height = 24, int width = 80,char background = ); char *cursor;/ 等價(jià)于 screenI

22、nit(24,80, )cursor = screenInit();(6)省略號(hào):典型的函數(shù)printf。聲明如:int printf( const char* . );省略號(hào)有下列兩種形式void foo( parm_list, . );void foo( . );4、返回一個(gè)值:由return返回的內(nèi)容。這條語(yǔ)句結(jié)束整個(gè)函數(shù)。另外可以通過(guò)return返回結(jié)果。一個(gè)具有返回類(lèi)型的函數(shù)必須具有返回值,要不然編譯要出現(xiàn)錯(cuò)誤。另外如果實(shí)際的返回值如果跟返回值類(lèi)型不同,則進(jìn)行隱式轉(zhuǎn)換,如果不能通過(guò)隱式轉(zhuǎn)換,那么就會(huì)出現(xiàn)編譯錯(cuò)誤。同時(shí)你會(huì)發(fā)現(xiàn)如果返回的對(duì)象比較大的時(shí)候返回引用,指針比返回值高效許多。5

23、、遞歸:直接或間接的調(diào)用自己的函數(shù)被稱為遞歸函數(shù)。因此必須有個(gè)結(jié)束條件。如:int rgcd( int v1, int v2 )if ( v2 != 0 )return rgcd( v2, v1%v2 );return v1;6、inline函數(shù):若一個(gè)函數(shù)被指定為 inline 函數(shù) 則它將在程序中每個(gè)調(diào)用點(diǎn)上被 內(nèi)聯(lián)地 展開(kāi) 例如int minVal2 = min( i, j );在編譯時(shí)被展開(kāi)為:int minVal2 = i j i : j;注意: inline 指示對(duì)編譯器來(lái)說(shuō)只是一個(gè)建議 編譯器可以選擇忽略該建議 因?yàn)榘岩粋€(gè)函數(shù)聲明為 inline 函數(shù) 并不見(jiàn)得真的適合在調(diào)用點(diǎn)上

24、展開(kāi)。因此inline只是用于那些較小,只有幾行代碼,經(jīng)常被調(diào)用的函數(shù)。7、鏈接提示符,extern “C”:注意:不能放在函數(shù)體內(nèi)。程序員用鏈接指示符 linkage directive 告訴編譯器 該函數(shù)是用其他的程序設(shè)計(jì)語(yǔ)言編寫(xiě)的 鏈接指示符有兩種形式 既可以是單一語(yǔ)句 single statement 形式 也可以是復(fù)合語(yǔ)句 compound statement 形式/ 單一語(yǔ)句形式的鏈接指示符extern C void exit(int);/ 復(fù)合語(yǔ)句形式的鏈接指示符extern C int printf( const char* . );int scanf( const char*

25、 . );/ 復(fù)合語(yǔ)句形式的鏈接指示符extern C #include 8、main處理命令行參數(shù):int main( int argc, char *argv ) . argc 包含命令行選項(xiàng)的個(gè)數(shù) argv 包含 aygc 個(gè) C 風(fēng)格字符串。9、專(zhuān)項(xiàng)函數(shù)的指針:(1)指向函數(shù)指針的類(lèi)型:定義:如 int myadd(int x,int y);-int (*pf)(int x ,int y);省略號(hào)是函數(shù)類(lèi)型的一部分 如果兩個(gè)函數(shù)具有相同的參數(shù)表 但是一個(gè)函數(shù)在參數(shù)表末尾有省略號(hào) 則它們被視為不同的函數(shù)類(lèi)型(2)初始化和賦值:初始化:如 int myadd(int x,int y);-i

26、nt (*pf)(int x ,int y)=&myadd;賦值:pf = &myadd;(3)調(diào)用:調(diào)用:如 int x=5,y=6; pf(x,y);或(*pf)(x,y);(4)函數(shù)指針的數(shù)組:如: int (*pf10)(int x ,int y);(5)參數(shù)和返回類(lèi)型:函數(shù)不能聲明一個(gè)返回類(lèi)型為函數(shù)類(lèi)型,如果是就會(huì)發(fā)生編譯錯(cuò)誤。(6)指向extern “C”的函數(shù)指針:指針 pf 指向一個(gè) C 函數(shù)如:extern C void (*pf)(int); 當(dāng)用 pf 調(diào)用一個(gè)函數(shù)時(shí) 被調(diào)用的函數(shù)是一個(gè) C 函數(shù)extern C void exit(int); 注意指向 C 函數(shù)的指針與

27、指向 C+函數(shù)的指針類(lèi)型是不同的。第八章 域和生命周期1、 域:C+支持三種形式的域:局部域(函數(shù)空間內(nèi),變量的聲明周期可以體現(xiàn)這一點(diǎn)),名字空間域(namespace,如:using namespace std)和類(lèi)域。*:注意習(xí)題,比較刁鉆。2、全局對(duì)象和函數(shù):全局域里面的對(duì)象、函數(shù)被稱為全局對(duì)象,全局函數(shù)。(1)聲明和定義:如:int x;/全局對(duì)象聲明,若對(duì)象未初次化,則默認(rèn)為0。 int add(int& x,int& y);/全局函數(shù)聲明void mian()重點(diǎn):注意extern的使用來(lái)實(shí)現(xiàn)一個(gè)全局變量在多個(gè)文檔中被使用。(2)不同文件之間聲明的匹配:注意要類(lèi)型什么都一樣。(3)

28、談?wù)勵(lì)^文件:一下是定義頭文件幾個(gè)需要注意的地方:頭文件提供的聲明邏輯上應(yīng)該屬于一個(gè)組;頭文件不應(yīng)該含有非 inline 函數(shù)或?qū)ο蟮亩x;3、局部對(duì)象:有三種局部對(duì)象: 1.自動(dòng)對(duì)象2.寄存器對(duì)象3.局部靜態(tài)變量(1)自動(dòng)對(duì)象:自動(dòng)對(duì)象的地址不應(yīng)該被作為函數(shù)的返回值,因?yàn)楹瘮?shù)一旦結(jié)束,改地址就指向一個(gè)無(wú)效地地址。當(dāng)一個(gè)自動(dòng)變量的地址被存儲(chǔ)在一個(gè)生命期長(zhǎng)于它的指針時(shí) 該指針被稱為空懸指針。(2)寄存器自動(dòng)對(duì)象:如:for ( register int ix = 0; ix sz; +ix )/.如果所選擇的變量被頻繁使用 則寄存器變量可以提高函數(shù)的執(zhí)行速度關(guān)鍵字 register 對(duì)編譯器來(lái)說(shuō)只

29、是一個(gè)建議 有些編譯器可能忽略該建議。(3)靜態(tài)局部對(duì)象:靜態(tài)局部對(duì)象在程序執(zhí)行到該對(duì)象的聲明處時(shí)被首次初始化;例如 下面是 gcd()的一個(gè)版本 它占用一個(gè)靜態(tài)局部對(duì)象來(lái)跟蹤遞歸的深度#include int traceGcd( int v1, int v2 )static int depth = 1;cout depth # depth+ endl;if ( v2 = 0 ) depth = 1;return v1;return traceGcd( v2, v1%v2 );另外未經(jīng)過(guò)初始化的對(duì)象,默認(rèn)值為0,自動(dòng)對(duì)象則為隨機(jī)的。4、動(dòng)態(tài)分配的對(duì)象:動(dòng)態(tài)分配的對(duì)象允許程序員完全控制它的分配與

30、釋放。(1)單個(gè)對(duì)象的動(dòng)態(tài)分配與釋放:如:new int;new int(5);int *p = new int;int *p = new int(5);delete p;(2)auto_ptr:必須包含頭文件#include定義有下列三種形式:auto_ptr identifier( ptr_allocated_by_new );auto_ptr identifier( auto_ptr_of_same_type );auto_ptr identifier;注意:不能讓auto_ptr指向不是new出來(lái)的對(duì)象;不能讓兩個(gè)auto_ptr指向同一個(gè)地方。(3)數(shù)組的動(dòng)態(tài)分配與釋放:如:為避免動(dòng)

31、態(tài)分配數(shù)組的內(nèi)存管理帶來(lái)的問(wèn)題 一般建議使用標(biāo)準(zhǔn)庫(kù) vector list 或 string容器類(lèi)型 這些類(lèi)型都會(huì)自動(dòng)管理內(nèi)存分配。(4)常量對(duì)象的動(dòng)態(tài)分配與釋放:注意必須初始化,以及指針必須為從const類(lèi)型。(5)定位new表達(dá)式:new 表達(dá)式的第三種形式可以允許程序員要求將對(duì)象創(chuàng)建 在已經(jīng)被分配好的內(nèi)存中;自己沒(méi)有看懂什么意思。5、名字空間定義:(1)名字空間定義:如:注意:名字空間定義不一定是連續(xù)的。(2)域操作符:就是 :在用到名字空間的時(shí)候,會(huì)使用域操作符(:)實(shí)現(xiàn)函數(shù),對(duì)象等的訪問(wèn)。(3)嵌套名字空間:如:訪問(wèn)的方法:在嵌套名字空間 MatrixLib 中聲明的類(lèi)的名字是cpl

32、usplus_primer:MatrixLib:matrix函數(shù)的名字是cplusplus_primer:MatrixLib:inverse(4 名字空間成員定義:名字空間成員可以被定義在名字空間定義之外,只有當(dāng)一個(gè)名字空間成員在名字空間定義中已經(jīng)被聲明過(guò) 它才能在該名字空間定義之外被定義。(5)ODR和名字空間成員:名字空間的對(duì)象、函數(shù)只做聲明,在其他文件中實(shí)現(xiàn)定義。(6)未命名的名字空間: 如:namespace/*、*/目的:局部與某文件中,在其他文件中不可見(jiàn)。就可以避免名字沖突。6、使用名字空間成員:(1)名字空間別名:例如 長(zhǎng)名字空間名如namespace International

33、_Business_Machines /* . */ 可以與一個(gè)較短的同義詞相關(guān)聯(lián) 如下namespace IBM = International_Business_Machines;那么:International_Business_Machine:show()-IBM:show();(2)using聲明:如:using namespace std;在后面使用std空間類(lèi)的對(duì)象,函數(shù)就可以直接使用,而不需要帶名字空間作為說(shuō)明了。(3) using指示符:using 指示符以關(guān)鍵字 using 開(kāi)頭 后面是關(guān)鍵字 namespace 然后是名字空間名。(4) 標(biāo)準(zhǔn)名字空間std:里面包含,等。

34、第九章 重載函數(shù) 1、重載函數(shù)聲明:函數(shù)重載 function overloading 允許多個(gè)函數(shù)共享同一個(gè)函數(shù)名 但是針對(duì)不同參數(shù)類(lèi)型提供共同的操作。(1)為什么要重載一個(gè)函數(shù)名:實(shí)現(xiàn)多態(tài)。(2)怎樣重載一個(gè)函數(shù)名:可以為兩個(gè)或多個(gè)函數(shù)提供相同的名字 只要它們的每個(gè)參數(shù)表惟一就行,或者是參數(shù)的個(gè)數(shù)不同 或者是參數(shù)類(lèi)型不同。(3)何時(shí)不重載一個(gè)函數(shù)名:如果不同的函數(shù)名所提供的信息可使程序更易于理解的話 則再用重載函數(shù)就沒(méi)有什么好處了。(4)重載與域:重載函數(shù)集合中的全部函數(shù)都應(yīng)在同一個(gè)域中聲明 例如 一個(gè)聲明為局部的函數(shù)將隱藏而不是重載一個(gè)全局域中聲明的函數(shù)(5)extern “c”和重載函

35、數(shù):鏈接指示符只能指定重載函數(shù)集中的一個(gè)函數(shù)。(6)指向重載函數(shù)的指針:void ( *pf1 )( unsigned int ) = &ff;unsigned int部分決定pf1指向那個(gè)函數(shù)。(7)類(lèi)型安全連接:不適用于用鏈接指示符 extern C聲明的函數(shù)。 2、重載解析的三個(gè)步驟:1 .確定函數(shù)調(diào)用考慮的重載函數(shù)的集合 確定函數(shù)調(diào)用中實(shí)參表的屬性2 .從重載函數(shù)集合中選擇函數(shù) 該函數(shù)可以在 給出實(shí)參個(gè)數(shù)和類(lèi)型 的情況下用調(diào)用中指定的實(shí)參進(jìn)行調(diào)用。3 .選擇與調(diào)用最匹配的函數(shù)3、參數(shù)類(lèi)型轉(zhuǎn)換:可能存在的轉(zhuǎn)換如下:從左值到右值的轉(zhuǎn)換;從數(shù)組到指針的轉(zhuǎn)換;從函數(shù)到指針的轉(zhuǎn)換;限定修飾轉(zhuǎn)換;

36、為一個(gè)函數(shù)調(diào)用選擇最佳可行函數(shù)時(shí) 編譯器會(huì)選擇在實(shí)參的類(lèi)型轉(zhuǎn)換方面 最好 的一個(gè)函數(shù) 函數(shù)轉(zhuǎn)換被劃分等級(jí)如下 精確匹配比提升好 提升比標(biāo)準(zhǔn)轉(zhuǎn)換好 標(biāo)準(zhǔn)轉(zhuǎn)換比用戶定義的轉(zhuǎn)換好(1)精確匹配的細(xì)節(jié):精確匹配最簡(jiǎn)單的例子是實(shí)參與函數(shù)參數(shù)類(lèi)型精確匹配。 精確匹配中從左值到右值 從數(shù)組到指針以及從函數(shù)到指針的轉(zhuǎn)換通常被稱為左值轉(zhuǎn)換 。(2)提升的細(xì)節(jié):提升實(shí)際上就是下列轉(zhuǎn)換之一1.char unsigned char 或 short 型的實(shí)參被提升為 int 型 如果機(jī)器上 int 型的字長(zhǎng)比short 整型的長(zhǎng) 則 unsigned short 型的實(shí)參被提升到 int 型 否則 它被提升到unsig

37、ned int 型;2.float 型的實(shí)參被提升到 double 類(lèi)型;3.枚舉類(lèi)型的實(shí)參被提升到下列第一個(gè)能夠表示其所有枚舉常量的類(lèi)型 int 、unsigned int、 long 或 unsigned long;4.布爾型的實(shí)參被提升為 int 型;(3)標(biāo)準(zhǔn)轉(zhuǎn)換的細(xì)節(jié):(4)引用:重點(diǎn):注意應(yīng)用對(duì)轉(zhuǎn)換的應(yīng)用。4、函數(shù)重載解析細(xì)節(jié):注意函數(shù)重載解析過(guò)程的三個(gè)步驟。(1)候選函數(shù):候選函數(shù)與被調(diào)用的函數(shù)具有同樣的名字。(2)可行函數(shù):可行函數(shù)是候選函數(shù)集合中的函數(shù) 它的參數(shù)表或者與調(diào)用中的實(shí)參數(shù)目相同 或者有更多的參數(shù)??尚泻瘮?shù)是這樣的函數(shù) 對(duì)于每個(gè)實(shí)參 都存在到函數(shù)參數(shù)表中相應(yīng)的參數(shù)類(lèi)

38、型之間的轉(zhuǎn)換。(3)最佳可行函數(shù):最佳可行函數(shù)是具有與實(shí)參類(lèi)型匹配最好的參數(shù)的可行函數(shù),就是最后被執(zhí)行的那個(gè)函數(shù)。(4)缺省實(shí)參:缺省實(shí)參可以使多個(gè)函數(shù)進(jìn)入到可行函數(shù)集合中 ,可行函數(shù)是指可以用調(diào)用中指定的實(shí)參進(jìn)行調(diào)用的函數(shù) 。可行函數(shù)可以有比函數(shù)調(diào)用實(shí)參表中的實(shí)參個(gè)數(shù)更多的參數(shù),只要每個(gè)多出來(lái)的參數(shù)都有相應(yīng)的缺省實(shí)參即可。如;第十章 函數(shù)模板1、函數(shù)模板的定義:如:關(guān)鍵字 typename 也可以被用在模板參數(shù)表中 以指示一個(gè)模板參數(shù)是一個(gè)類(lèi)型如同非模板函數(shù)一樣, 函數(shù)模板也可以被聲明為 inline 或 extern 應(yīng)該把指示符放在模板參數(shù)表后面 而不是在關(guān)鍵字 template 前面。

39、如: 重點(diǎn):如果一個(gè)函數(shù)模板有一個(gè)以上的模板類(lèi)型參數(shù) 則每個(gè)模板類(lèi)型參數(shù)前面都必須有關(guān)鍵字 class 或 typename。2、函數(shù)模板實(shí)例化:函數(shù)模板指定了怎樣根據(jù)一組或更多實(shí)際類(lèi)型或值構(gòu)造出獨(dú)立的函數(shù) ,這個(gè)構(gòu)造過(guò)程被稱為模板實(shí)例化。3、模板實(shí)參推演:當(dāng)函數(shù)模板被調(diào)用時(shí) 對(duì)函數(shù)實(shí)參類(lèi)型的檢查決定了模板實(shí)參的類(lèi)型和值 ,這個(gè)過(guò)程被稱為模板實(shí)參推演。如:templatetype Mysum(type x,type y);- mysum(5,10);可以推演出type為int類(lèi)型。4、顯示模板實(shí)參: 如:templatetype Mysum(type x,type y);- mysum(5,1

40、0);顯示指出type為int類(lèi)型。 5、模板編譯模式:C+支持兩種方式的編譯模式:1.包含模式 2.分離模式(1)包含編譯模式:在包含編譯模式下 我們?cè)诿總€(gè)模板被實(shí)例化的文件中包含函數(shù)模板的定,并且往往把定義放在頭文件中 像對(duì)內(nèi)聯(lián)函數(shù)所做的那樣。說(shuō)白了就是在頭文件聲明的時(shí)候就直接定義了。(2)分離編譯模式:頭文件只負(fù)責(zé)聲明,然后再.c文件中使用export說(shuō)明并進(jìn)行定義。(3)顯示實(shí)例化聲明:在顯式實(shí)例化聲明所在的文件中,函數(shù)模板的定義必須被給出。如:說(shuō)明:對(duì)于給定的函數(shù)模板實(shí)例,顯式實(shí)例化聲明在一個(gè)程序中只能出現(xiàn)一次。 6、模板顯示特化:函數(shù)模板 sum()被顯式特化:template T

41、1 sum( T2 op1, T3 op2 );/ 顯式特化聲明/ 錯(cuò)誤: T1 的模板實(shí)參不能被推演出來(lái)/ 它必須顯式指定template double sum( float, float );/ ok: T1 的實(shí)參被顯式指定/ T2 和 T3 可以從 float 推演出來(lái)template double sum( float, float );/ ok: 所有實(shí)參都顯式指定template int sum( char , char ); 7、重載函數(shù)模板:如:8、考慮模板函數(shù)實(shí)例的重載解析:跟重載函數(shù)的解析過(guò)程基本一樣。9、模板定義函數(shù)實(shí)例的重載解析:同上。10、名字空間和函數(shù)模板:同樣,

42、要先用using聲明函數(shù)。11、函數(shù)模板示例: 模板的定義和使用的例子程序,有必要讀一讀。第十一章 異常處理1、 拋出異常:異常 Exception 是程序可能檢測(cè)到的,運(yùn)行時(shí)刻不正常的情況;如被 0 除,數(shù)組越界訪問(wèn)或空閑存儲(chǔ)內(nèi)存耗盡等等。2、 Try塊: try 塊必須包圍能夠拋出異常的語(yǔ)句 ,try 塊以關(guān)鍵字 try 開(kāi)始,后面是花括號(hào)括起來(lái)的,語(yǔ)句序列 在 try 塊之后是一組處理代碼 被稱為 catch 子句。3、 捕獲異常:catch塊進(jìn)行異常處理。(1)異常對(duì)象:catch 子句的異常聲明可以是一個(gè)類(lèi)型聲明或一個(gè)對(duì)象聲明,這完全取決于throw拋出類(lèi)型。(2)棧展開(kāi):在查找用來(lái)

43、處理被拋出異常的 catch 子句時(shí) 因?yàn)楫惓6顺鰪?fù)合語(yǔ)句和函數(shù)定義 這個(gè)過(guò)程被稱作棧展開(kāi);隨著棧的展開(kāi),盡管局部類(lèi)對(duì)象的生命期是因?yàn)閽伋霎惓6唤Y(jié)束 但是這些局部類(lèi)對(duì)象的析構(gòu)函數(shù)也會(huì)被調(diào)用。(3)重新拋出:在catch塊中繼續(xù)拋出異常。(4)catch-all處理代碼:即使一個(gè)函數(shù)不能處理被拋出的異常。但是它也可能希望在帶著異常退出之前執(zhí)行一些動(dòng)作。如:說(shuō)明:這種 catch 子句有一個(gè)形式為( .) 的異常聲明,這里的點(diǎn)被稱為省略號(hào),對(duì)任何類(lèi)型的異常,都會(huì)進(jìn)入這個(gè) catch 子句。4、 異常規(guī)范:如:說(shuō)明:聲明時(shí)指明了異常規(guī)范,那么定義的時(shí)候也必須注明異常規(guī)范。額外:異常規(guī)范與函數(shù)指針

44、:5、 異常與設(shè)計(jì)事項(xiàng):雖然對(duì)于異常處理的支持是被內(nèi)置在語(yǔ)言中的,但并不是每個(gè) C+程序都應(yīng)該使用異常處理,因?yàn)閽伋霎惓2幌裾:瘮?shù)調(diào)用那樣快,所以異常處理應(yīng)該用在獨(dú)立開(kāi)發(fā)的不同程序部分之間,用于不正常情況的通信。第十二章 泛型算法1、 概述:每個(gè)泛型算法的實(shí)現(xiàn)都獨(dú)立于單獨(dú)的容器類(lèi)型。2、 使用泛型算法:把一串泛型算法調(diào)用連接在一起的一個(gè)例子程序。3、 函數(shù)對(duì)象:函數(shù)對(duì)象三種來(lái)源:1.標(biāo)準(zhǔn)庫(kù)預(yù)定義的一組算術(shù) 關(guān)系和邏輯函數(shù)對(duì)象;2.一組預(yù)定義的函數(shù)適配器,允許我們對(duì)預(yù)定義的函數(shù)對(duì)象,甚至于任何函數(shù)對(duì)象進(jìn)行特殊化或者擴(kuò)展;3.我們可以定義自己的函數(shù)對(duì)象 將其傳遞給泛型算法 或?qū)⑺鼈儌鹘o函數(shù)適配器

45、;(1)預(yù)定義函數(shù)對(duì)象:預(yù)定義函數(shù)對(duì)象被分成算術(shù)、 關(guān)系和邏輯操作。(2)算術(shù)函數(shù)對(duì)象:預(yù)定義的算術(shù)函數(shù)對(duì)象支持加 減 乘 除 求余和取反。如:Plus,multiplies,divides,modulus,negate;(3)關(guān)系函數(shù)對(duì)象:預(yù)定義的關(guān)系函數(shù)對(duì)象支持等于 不等于 大于 大于等于 小于和小于等于;如:equal_to,not_equal_to,greater,greater_equal,less,less_equal;(4)邏輯函數(shù)對(duì)象:預(yù)定義的邏輯函數(shù)對(duì)象支持邏輯與,邏輯非,邏輯或;如:logical_and,logical_or,logical_not;(5)函數(shù)對(duì)象的函數(shù)適

46、配器:被分為綁定器(binder)和取反器(negator);如:重點(diǎn);(6)實(shí)現(xiàn)函數(shù)對(duì)象:實(shí)現(xiàn)小于等于功能。用類(lèi)的方式實(shí)現(xiàn)。4、 回顧iterator:只是就舉了一個(gè)iterator的使用例子。(1)插入iterator:back_inserter();front_inserter();inserter();如: 實(shí)現(xiàn)將ivec中所有內(nèi)容插入到Vres中。 unique_copy( ivec.begin(), ivec.end(),back_inserter( vres );/后面插入unique_copy( ivec.begin(), ivec.end(),front_inserter(

47、vres );前面插入unique_copy( ivec.begin(), ivec.end(),inserter( vres, vres.begin() );/指定位置插入。(2)反向iterator:反向 iterator 的遍歷方式同前向 iterator 一樣,不同的是對(duì)于前向 iterator +操作訪問(wèn)容器中的下一個(gè)元素,對(duì)于反向 iterator 它訪問(wèn)的是前面的元素。如:(3)iostream iterator:必須包含頭文件-#include ;如:istream_iterator input( cin );istream_iterator end_of_stream;vec

48、tor vec;copy ( input, end_of_stream, inserter( vec, vec.begin() );sort( vec.begin(), vec.end(), greater() );ostream_iterator output( cout, );unique_copy( vec.begin(), vec.end(), output );(4)istream_iterator:如:(3)中的例子;(5)ostream_iterator:如:(3)中的例子,另外定義有兩種方式:(6)五中iterator:InputIterator,OutputIterator,

49、 ForwardIterator,BldirectionalIterator,和 RandomAccessIterator。介紹說(shuō)明:P503。5、 泛型算法(1)查找算法:adjacent_find(), binary_search(), count(), count_if(), equal_range(),find(), find_end(), find_first_of(), find_if(), lower_bound(),upper_bound(), search(), search_n()(2)排序和通用整序算法:inplace_merge(), merge(), nth_elem

50、ent(), partial_sort(),partial_sort_copy(), partition(), random_shuffle(), reverse(),reverse_copy(), rotate(), rotate_copy(), sort(), stable_sort(),stable_partition();(3)刪除和替換算法:copy(), copy_backwards(), iter_swap(), remove(), remove_copy(),remove_if(), remove_copy_if(), replace(), replace_copy(),rep

51、lace_if(), replace_copy_if(), swap(), swap_range(), unique(),unique_copy();(4)排列組合算法:next_permutation(), prev_permutation();(5)算法算法:accumulate(), partial_sum(), inner_product(), adjacent_difference();(6)生成和異變算法:fill(), fill_n(),for_each(), generate(), generate_n(), transform();(7)關(guān)系算法:equal(), inclu

52、des(), lexicographical_compare(), max(), max_element(),min(), min_element(), mismatch();(8)集合算法:set_union(), set_intersection(), set_difference(),set_symmetric_difference();(9)堆算法:make_heap(), pop_heap(), push_heap(), sort_heap();6、 何時(shí)不用泛型算法:如:map,set等關(guān)系容器不適合泛型算法,存儲(chǔ)不連續(xù)。下面是list的容器的一些定制操作:list:merge()

53、 用第二個(gè)有序的 list 合并一個(gè)有序 listlist:remove() 刪除等于某個(gè)值的元素list:remove_if() 刪除滿足某個(gè)條件的元素list:reverse() 將 list 中元素反向排列l(wèi)ist:sort() 排序 list 的元素list:splice() 把一個(gè) list 的元素移到另一個(gè) list 中l(wèi)ist:unique() 刪除某個(gè)元素的重復(fù)連續(xù)拷貝(1)list:merge():合并兩個(gè)有序的list,合并后,ilist2為空。(2)list:remove():為1的所有l(wèi)ist實(shí)例全部刪除。(3)list:remove_if():刪除所有偶數(shù)。(4)li

54、st:reverse():反向。(5)list:sort():排序。(6)list:splice():搬移。(7)list:unique():使用方式一:使用unique之前,必須保證list序列有序。如:使用方式二:重點(diǎn) 如:第十三章 類(lèi)1、類(lèi)定義:類(lèi)定義包含兩部分:類(lèi)頭由關(guān)鍵字 class 及其后面的類(lèi)名構(gòu)成,類(lèi)體由一對(duì)花括號(hào)包圍起來(lái) 類(lèi)定義后面必須接一個(gè)分號(hào)或一列聲明(1)數(shù)據(jù)成員:可以是任意類(lèi)型。注意,除了靜態(tài)的數(shù)據(jù)成員,其他的任何類(lèi)型的數(shù)據(jù)成員在類(lèi)體都不能顯示的初始化。如: (2)成員函數(shù):被聲明在類(lèi)體中。類(lèi)似于名字空間里面的函數(shù)。注意,成員函數(shù)的定義可以在類(lèi)體中完成,成員函數(shù)擁有訪問(wèn)公有私有成員的權(quán)限,可以是重載函數(shù)。(3)成員訪問(wèn):

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論