




免費預(yù)覽已結(jié)束,剩余15頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
M*a*i*l*l*o*v*e.*c*n1)2) 關(guān)于文件格式標(biāo)準(zhǔn)c+頭文件是沒有后綴名的,原因是不同的實現(xiàn)產(chǎn)品的頭文件格式不一致.c格式的是c程序的文件,但在unix中卻被當(dāng)作是c+程序的文件.Include 一般引用工程文件和標(biāo)準(zhǔn)頭文件,可以更改系統(tǒng)設(shè)置的默認(rèn)路徑;”一般引用自定義頭文件,會從當(dāng)前目錄下開始找。3) 并不是所有c+實現(xiàn)都支持命名空間,所以在不支持的里面用using是會報錯的.4) 無論是一種語言還是它的標(biāo)準(zhǔn)庫都不可能提供實際程序設(shè)計環(huán)境要求的所有數(shù)據(jù)類型。因此現(xiàn)代語言都提供了類型定義工具設(shè)施使我們能夠在語言中引入新的類型這些類型的用法與內(nèi)置類型的用法一樣方便在C+中這種設(shè)施就是類機制。5) #ifndef 沒有定義,#ifdef如果定義了,前者用于避免重復(fù)包含宏.6) 在編譯標(biāo)準(zhǔn)c+的時候會自動定義_CPLUSPLUS,而編譯c的時候會自動定義_STDC_7) 預(yù)定義名字,_LINE_記錄文件已經(jīng)被編譯的行數(shù),_FILE_記錄正在被編譯的文件的名字._TIME_ 編譯文件的時間;_DATE_編譯文件的日期.8) 斷言assert()定義在c語言中的頭文件,在c+中是cassert.9) c+一等公民(first class ) 包括整型等但不包括數(shù)組類型10) 指針的類型都是整形,因為存放的值是內(nèi)存地址。而指針指向的類型可以是多種類型。11) 用指針來間接操作變量并沒有什么好處,比直接操作變量名字的效率低而且容易錯.指針的作用應(yīng)該是管理和操縱動態(tài)分配的內(nèi)存.12) 靜態(tài)與動態(tài)內(nèi)存分配,靜態(tài)對象是有名字的變量,動態(tài)對象是沒有名字的變量,只能通過指針操作.靜態(tài)對象的分配與釋放有編譯器自動完成。動態(tài)對象必須通過new和delete表達(dá)式顯示管理。13) 內(nèi)存泄漏(memory leak)是指一塊動態(tài)分配的內(nèi)存,而擁有這塊內(nèi)存的指針已經(jīng)丟失。沒有辦法繼續(xù)使用這塊內(nèi)存。14) c+不允許成員函數(shù)和數(shù)據(jù)成員共享同一個名字.15) 內(nèi)聯(lián)函數(shù)inline function,內(nèi)聯(lián)函數(shù)不會引入任何函數(shù)調(diào)用。避免了調(diào)用函數(shù)比直接訪問內(nèi)存開銷更大的類結(jié)構(gòu)設(shè)置。在類中定義的成員函數(shù)會被自動當(dāng)成是內(nèi)聯(lián)函數(shù)。既編譯的時候會被擴展成直接訪問字段。16) 函數(shù)重載function overloading,函數(shù)重載允許2個或以上的函數(shù)使用同一個名字,但是他們的參數(shù)表必須不同:參數(shù)類型不同,或參數(shù)數(shù)目不同。17) 靜態(tài)成員,無論類的對象被定義了多少個,靜態(tài)成員在對象中只有一個。這個是類的所以對象成員之間共享數(shù)據(jù)的一種方式.18) 域操作符class scope operator 雙冒號??梢栽陬惖耐獠慷x一個成員函數(shù)屬于它。19) 虛擬函數(shù)的調(diào)用要等到運行時刻,系統(tǒng)根據(jù)被調(diào)用對象的類型來決定選擇虛擬函數(shù)的那一個實例。20) 虛擬函數(shù)比非虛擬函數(shù)的效率要低一些6因為它們不能被內(nèi)聯(lián)內(nèi)聯(lián)發(fā)生在編譯時刻而虛擬函數(shù)是在運行時刻被處理的所以它們可能是運行時刻效率低下的原因之一。21) 類模板中的成員函數(shù)是在需要的時候才被實例化對應(yīng)的類型的。22) 當(dāng)訪問名字空間下的方法的時候也會使用雙冒號 MyNameSpace:MyClass,這個和類的外部方法符號一致的。23) namespace shortname=long_name_space_name使用簡短名字或者使用using namespace name. 24) using namespace name:class可以使name名字空間僅僅class可見25) 字符串可以換行顯示 在一行的末尾加上 反斜杠既可.26) 變量的rvalue右值存放的是read值,lvalue左值存放的是location值即是變量的內(nèi)存地址值。27) 變量的定義會引起內(nèi)存分配,一個對象分配后只能有一個去訪問它的地址值,所以一個變量只能定義一次.28) 對象聲明extern說明該對象在外部存在定義,這里是提供其類型說明,并不分配內(nèi)存.可以一處定義多處聲明,聲明常放在頭文件中,需要的時候被引用。也便于修改。29) 變量應(yīng)該由3個值組成。變量的標(biāo)識符:變量名字;變量的左值:內(nèi)存地址值;變量的右值:存放的值.30) 命名規(guī)則:對象名一般用小寫字母;31) 全局變量會自動給變量初始值,局部變量或new表達(dá)式生成的對象是未初始化的,他們的值是未定義的。32) 被聲明了初始值的對象稱做已經(jīng)初始化的。33) 兩個類型不同的指針禁止相互賦值,因為會引起編譯器的解釋困難。34) 空類型指針 void *可以接受除函數(shù)指針以外的其它數(shù)據(jù)類型的指針的賦值。35) 指針pr表示存儲的對象的內(nèi)存地址值,&pr表示的當(dāng)前指針pr的內(nèi)存地址值.36) 指針的加減法取決于指針的類型,類型決定了地址移動的單位長度.由于變量可能不是連續(xù)分配的,所以除了數(shù)組以外最好不要這么使用。37) c+提供2種類型的字符串,c保留下來的風(fēng)格以及c+自己實現(xiàn)的string類.38) c風(fēng)格的字符串在指針指向0和字符串為空串的時候長度都為0.39) Const變量必須在定義的時候初始化,const指針指向的對象不論是否是const變量都不能修改值。40) 引用由類型標(biāo)識符加取地址符號組成,必須在定義的時候初始化,引用的對象一旦指定就不能再修改。指針類型不能直接賦值常量,引用類型只有在常變量類型的情況下才能賦值常量/ 僅對于const 引用才是合法的const int &ir = 1024;const int &ir2 = dval;.const double &dr = dval + 1.0;41) 引用對象之間的賦值修改的是引用指向的對象的值,而引用仍然指向原來的對象不會被修改。42) 指針不能指向引用43) 數(shù)組初始化的時候 長度必須確定 也不能是0 數(shù)組的長度要比字符串的長度多1個 因為末尾會有0占位.44) 枚舉不僅定義了一個整數(shù)常量,還構(gòu)成了一個集合。45) 如果變量不是常變量 即使賦值了也不能作為數(shù)組的維數(shù).46) 數(shù)組不能被另外一個數(shù)組初始化,也不能賦值給另外個數(shù)組。另外c+不允許聲明引用數(shù)組.47) C+中的vector ,complex, pair都支持泛型.48) C+ 內(nèi)部定義的函數(shù)自動被聲明成內(nèi)聯(lián)函數(shù),但是在類外部實現(xiàn)的函數(shù)必須顯示聲明生內(nèi)聯(lián)函數(shù)。49) 在類體外定義/的內(nèi)聯(lián)成員函數(shù)應(yīng)該被包含在含有該類定義的頭文件中。50) 指針在解引用之前,需要判斷下指針地址是否為0,否則報內(nèi)存出錯。51) 在邏輯與表達(dá)式中,只要第一個表達(dá)式的值為false,就不會計算第2個。在邏輯或表達(dá)式中,只要第一個表達(dá)式的值為true,就不會計算第2個。52) c/c+不保證從左到由的順序,所以要注意運算順序。53) c+ 棧 是后進(jìn)先出 順序放置數(shù)據(jù) 54) sizeof表達(dá)式在編譯時刻計算,所以可以被看作常量表達(dá)式。55) 運行時刻的內(nèi)存分配叫動態(tài)內(nèi)存分配。56) 程序的空閑存儲區(qū)叫堆heap.棧叫做stack.,棧是后進(jìn)先出。57) 位操作符: 按位非:取反操作 1-0,0-1移位操作右移操作符 左邊補0按位與& 有0就為0按位或| 有1就為1按位異或 1出現(xiàn)且1次 為1 其它的全部為058) c+ 整形值前面有個0表示八進(jìn)制 0x表示十六進(jìn)制59) 賦值操作符= 是右結(jié)合的 即使最先計算右邊的。算術(shù)運算符是左結(jié)合的,左線計算左邊的。60) 混合類型的算術(shù)表達(dá)式,最寬的類型為目標(biāo)轉(zhuǎn)換類型。61) Void*指針,常被叫做泛型指針。任何非const類型的指針都可以賦值給void*型的指針。指向?qū)ο箢愋臀炊ɑ蛘邔ο箢愋涂赡馨l(fā)生變化的情況。Void*類型的指針再解引用之前必須進(jìn)行類型轉(zhuǎn)換,因為僅僅從void編譯器無法知道對象的類型,從而無法計算對象的值。Void*指針賦值給其它指針的時候必須進(jìn)行強制轉(zhuǎn)換。62) Volatile 編譯不會對改成員變量進(jìn)行優(yōu)化。63) Const_cast() 取消掉變量的常量性,static_cast用于將不確定的類型轉(zhuǎn)換成確定的類型,具有較大的風(fēng)險性,一般都需要進(jìn)行檢查。Reinterpret_cast()底層位操作轉(zhuǎn)換。Danymic_cast支持在運行時刻來判斷對象的類型。64) 程序語句中最簡單的語句是空語句,由一個分號構(gòu)成.65) Switch case分支語句,case某個分支可以有多條語句。但是如果有聲明對象或變量的話必須加花括號把整個case分支包含起來。66) For循環(huán)可以應(yīng)用在外部定義的變量,從而把初始化語句省略,只保留;號67) 標(biāo)準(zhǔn)c+之前的for循環(huán)的括號內(nèi)的定義變量可以擴展外部。68) Do while 循環(huán)中,while不支持變量的定義和聲明。69) Break只能放在循環(huán)語句和switch分值語句中,放在if語句中要報錯。退出的時候是退出最近的那一層的for,while ,do while,switch循環(huán)或分支。70) Continue只能出現(xiàn)在循環(huán)語句中。71) Goto lablel, label 以:結(jié)束,如果右邊緊挨右花括弧,需要加句空語句,即使加個;即可。Goto不能跳過有聲明的語句,除非該語句被放在語句快中。盡量不用goto語句。72) 終止程序的辦法。#include,abort();函數(shù)。 #include assert( 條件 );還有就是拋出異常。73) 鏈表中的元素不是順序放在內(nèi)存中的,所以對+指針不能找到下一個值。74) 抽象容器。順序容器list,vector,deque(雙端隊列),由單一元素組成的順序集合。關(guān)聯(lián)容器,可以查詢一個元素是否存在,并且可以有效的提取。如set,map.multimap.75) 容量是指下一次需要增長自己之前能夠被加入到容器中的元素的總數(shù)。只指順序容器,且不包括list.76) Vector適合小類型的數(shù)據(jù)使用,list適合復(fù)雜類型的使用。Vector的reserve()操作是調(diào)整容量,但是對于小類型的數(shù)據(jù)反而會變的更慢。大類型的數(shù)據(jù)效果會更好。List和set,map容器不支持排序?77) 如果容器的操作主要是在前段插入元素,應(yīng)該選擇deque而不是vector.78) 迭代器提供了一種一般化的方法,對關(guān)聯(lián)容器或順序容器的每個元素就行連續(xù)訪問。79) Vector和deque在內(nèi)存中是連續(xù)的,而list在內(nèi)存中不是連續(xù)的。80) string函數(shù) find(),find_first_of(),substr(),rfind(),find_first_not_of(),find_last_Of(), find_last_not_of(),erase(),assign(),append()81) vector a(“fdasfda”)為什么是錯的 82) 當(dāng)我們只想知道一個值是否存在時set 最有用處希望存儲也可能修改一個相 關(guān)的值時map 最為有用.map has a alias name associative array.83) 有許多編譯器不支持對vector,set,map等聲明時的缺省參數(shù),所以要手動加入allocator.默認(rèn)情況下,關(guān)聯(lián)容器用小于關(guān)系符排序。84) Map的count和find可以查找一個鍵值是否存在。關(guān)聯(lián)容器不支持預(yù)定義的分配長度。必須插入而不是賦值。85) Multimap支持一個鍵多個項,但是multimap不支持下標(biāo)操作符。86) 函數(shù)定義的地方參數(shù)叫做形式參數(shù),當(dāng)實際調(diào)用函數(shù)傳遞的參數(shù)叫實際參數(shù)。函數(shù)類型和內(nèi)置數(shù)組類型不能作為函數(shù)的返回類型。標(biāo)準(zhǔn)c+中函數(shù)返回類型不能省略,以前的會默認(rèn)當(dāng)成int的返回類型。87) 引用指向了對象后就不能在去給引用變量賦值其它變量的名字,但是可以該量引用變量引用的對象的值。88) 為了支持class類型,尤其是有效直觀的實現(xiàn)重載操作符機制,c+特別引入了引用類型.89) C+中的數(shù)組永遠(yuǎn)不會按值傳遞,參數(shù)默認(rèn)的是數(shù)組的第0個值的指針,所以不會對數(shù)組的長度進(jìn)程檢查。當(dāng)不想改變到數(shù)組的值,可以加const進(jìn)行修飾.c風(fēng)格的字符串是字符的數(shù)組,最后一個是0.90) 指向數(shù)組類型的指針變量,在取值的時候可以通過解引用和使用訪問器來進(jìn)行訪問值。使用訪問器的時候不需要再解引用。91) 函數(shù)調(diào)用的實參按位置解析,缺省參數(shù)只能用來替換函數(shù)調(diào)用缺少的尾部實參。函數(shù)申明可以全部或部分指定缺省參數(shù)實參。但是記住,在左邊參數(shù)的任何缺省參數(shù)被提供之前,最右邊的未初始化參數(shù)(在其他地方初始化的可以不提供了)必須提供缺省參數(shù)值。一參數(shù)只能在一個文件中被指定一次缺省參數(shù)。92) Inline函數(shù)必須同調(diào)用它的函數(shù)在同一個文本中出現(xiàn)。Inline函數(shù)對編譯器來說只是個建議,可能會被忽略,因為有的時候不適合展開函數(shù)。93) 鏈接指示符用于申明其它語言寫的函數(shù),不能在函數(shù)內(nèi)部聲明。復(fù)合申明即申明多個函數(shù)可以在外部加好括號,當(dāng)放include的時候是將該文件的所有函數(shù)申明了。94) 函數(shù)指針與指針函數(shù)。函數(shù)的類型只決定于返回值類型與參數(shù)表。函數(shù)的類型決定了指針類型的不一致。當(dāng)一個函數(shù)沒有調(diào)用操作符類型的時候,會被解釋成指向該類型的函數(shù)指針。函數(shù)指針賦值為0的時候,表示不指向任何指針。函數(shù)指針調(diào)用前確保已經(jīng)被初始化或賦值,切不指向0.95) 函數(shù)指針數(shù)組,每個數(shù)組的元素都是一個指向函數(shù)的函數(shù)指針。96) 注意到,多維數(shù)組的指針表達(dá)方式和通過typedef定義的指向函數(shù)的指針數(shù)組定義方式很像。97) 函數(shù)指針定義的時候,返回的類型是對應(yīng)的前面的符號的類型,如int (*function) ( int parameter).而返回指針函數(shù)的定義如下:int(*function(int a)(int parameter).這種形式的算不算是指針函數(shù)?98) 函數(shù)參數(shù)的類型不能是函數(shù)類型,函數(shù)類型的將會杯轉(zhuǎn)換成對應(yīng)的函數(shù)指針類型。函數(shù)指針可以用作參數(shù)和返回類型。函數(shù)不能返回函數(shù)類型,可以返回指向它的函數(shù)指針。函數(shù)指針調(diào)用時,可以直接想調(diào)用函數(shù)一樣輸入名字再加參數(shù),或者先加括號解除引用再調(diào)用。99) 指向c+的函數(shù)指針和指向c的函數(shù)指針類型不一樣.不能相互賦值。當(dāng)然部分編譯器已經(jīng)把這個作為一種擴展而不加限制。100) 鏈接指示符extern “”當(dāng)聲明一個函數(shù)時,這個函數(shù)的參數(shù)也會被當(dāng)作鏈接指示的類型的函數(shù)。101) c+中有三種域,類域、命名空間域、局部域。If語句在條件中定義的變量可以在其分支語句中有效。102) 全局域內(nèi)引入的變量叫全局變量,全局變量是一個運行時刻實體,生命期從程序開始始,程序結(jié)束終。103) 函數(shù)聲明指定了函數(shù)的名字、返回類型及其參數(shù)表。函數(shù)定義除了函數(shù)聲明還包括函數(shù)體。104) 對象的聲明即使定義的表達(dá)式,但是定義只能出現(xiàn)一次,所以加上了extern關(guān)鍵字,既是不會分配內(nèi)存。但是記得不能賦值。否則仍然被看成是定義。105) 類型安全鏈接是用于檢查在聲明時候函數(shù)的參數(shù)不一致的情況。106) 符號常量和inline函數(shù)可以被定義多次,所以可以放在頭文件里面。107) 建議把那些天生無法內(nèi)聯(lián)的函數(shù)不聲明為inline,并且不放在頭文件中。108) C+中的local object分3種,automatic object(自動對象),register object(寄存器對象),local static object(局部靜態(tài)對象)。自動對象隨函數(shù)的調(diào)用而分配內(nèi)存在棧上,隨函數(shù)的結(jié)束而結(jié)束,它的任何值都被丟掉。所以它的地址不應(yīng)該作為函數(shù)的返回值,因為是一個無效無值的存儲區(qū)。109) 空懸指針(dangling pointer),存放有生命期長于它的自動變量的地址的指針。110) 在函數(shù)中被頻繁使用的自動變量可以使用register關(guān)鍵字。有的編譯器會把它加載到記起的寄存器中。但這個對編譯器來說只是個建議。111) 未初始化的局部靜態(tài)對象會初始化為0,自動對象的值可能回事任意值,除非它被顯示初始化。112) 動態(tài)分配的對象.dynamically allocated object,動態(tài)分配的對象被分配在程序的空閑存儲區(qū)里面,分配的數(shù)組長度可以在運行時刻計算。113) 再對指針delete之前沒有必要進(jìn)行測試是否指針的值為0,因為系統(tǒng)默認(rèn)delete操作就自動測試。Delete對象之后,最好把指針設(shè)為0,避免讓指針變成空懸指針。Delete操作只能應(yīng)用在用new表達(dá)式生成的對象上。114) 動態(tài)分配容易照成的3種錯誤。1.delete表達(dá)式失敗,內(nèi)存無法返回,照成內(nèi)存泄漏;2.多個指針引用到同一個地址,不同指針執(zhí)行了不同的操作。3.delete指針的對象沒有被置為0,然后繼續(xù)讀寫指針指向的對象。115) Auto_ptr可以幫助程序員自動管理用new動態(tài)分配的單個對象,不支持?jǐn)?shù)組,auto_ptr指針生命期結(jié)束的時候,對象被自動釋放。Get()用于判斷值auto_ptr指針值是否為0.在auto_ptr被定義之后,不能直接賦值,只能通過reset(new表達(dá)式)來完成。Auto_Ptr在指向新值之前會刪除以前的變量。用assign(“值”)可以不刪除原來的對象,僅僅是修改它的值。Release()是取的指針的地址值,并且刪除以前的那個指針。保證始終只有一個auto_ptr指向一個對象。116) Auto_ptr的get()和release()區(qū)別。前者,把指針地址賦值給其它變量,并不交出控制權(quán),后者要交出控制權(quán)。在做delete操作的時候,對于前者要作用在它本身,后面要作用在被賦值的新的指針對象上。117) 空閑內(nèi)存區(qū)動態(tài)分配的數(shù)組必須在for循環(huán)中初始化。因為大多數(shù)處理C 風(fēng)格字符串?dāng)?shù)組的例程都要遍歷數(shù)組直到結(jié)尾空字符缺少該空字符常常導(dǎo)致嚴(yán)重的程序錯誤因為程序會讀寫到其他不該讀寫的內(nèi)存我們建議使用C+標(biāo)準(zhǔn)庫string 這正是避免此類錯誤的一個原因.118) 對于由new表達(dá)式分配的內(nèi)存,只有第一維可以是運行時刻的常量,其它維必須是在編譯時刻已知的常量值。119) 當(dāng)在函數(shù)內(nèi)部要訪問外部的同名參數(shù)時候,可以使用:變量名 的方式得到。120) 成員的定義必須在其聲明所在的名字空間和其外圍名字空間定義。121) 在某個文件中使用沒有命名的名字空間,可以使該名字空間的函數(shù)僅僅在這個文件內(nèi)部可見。使用這個函數(shù)的時候,直接調(diào)用名字即可。C中實現(xiàn)這個辦法是將變量定義成靜態(tài)的,這樣在其它文件中就不可見。122) Namespace short_name=ture_long_name可以使用shortname來代替長的名字空間。Using 名字空間:函數(shù) 可以部分引用名字空間的內(nèi)容。Using namespace 名字 引入整個名字空間。由using引起的二義性錯誤是在該名字被使用時才被檢測到的。Using引入的變量會被看成是一種全局聲明,所以局部變量可以隱藏using引入的變量。由多個using 指示符引起的二義性錯誤只能在使用點上被檢測到。123) 只有參數(shù)和返回類型都不同才叫做函數(shù)的重載,反之2個都不同的時候會被看成是函數(shù)的重復(fù)聲明。只有缺省實參不同也會被看成是函數(shù)的重復(fù)聲明。當(dāng)函數(shù)的參數(shù)是按值傳遞的時候,參數(shù)前有const或volatile都被看成是同一個函數(shù)或聲明。當(dāng)是按指針或引用傳遞的時候就會被看成是不同的函數(shù)。124) 重載函數(shù)的聲明都必須在同一個域中,一個聲明為局部的函數(shù)將隱藏而不是重載一個全劇域中聲明的函數(shù)。不同名字空間,不同類的成員函數(shù)都不可以重載。但是通過using指示符,可以將不同名字空間的函數(shù)在當(dāng)前引入域進(jìn)行函數(shù)重載。125) Using聲明和using 指示符。前者是引入名字空間的字段或函數(shù),后者是引入整個名字空間。126) 鏈接指示符只能指定重載函數(shù)中的一個函數(shù),因為編譯器沒有辦法對這種外部函數(shù)進(jìn)行特殊編碼,函數(shù)調(diào)用的時候會存在多個名字的函數(shù)而導(dǎo)致編譯鏈接不能保證正確安全進(jìn)行。兩個函數(shù)指針類型之間不能進(jìn)行類型轉(zhuǎn)換。127) 函數(shù)重載解析是把函數(shù)調(diào)用與重載函數(shù)集合中的一個函數(shù)相關(guān)聯(lián)的過程。候選函數(shù)-可行函數(shù)-最佳可行函數(shù)。最佳可行函數(shù)選擇過程中有個優(yōu)先級的規(guī)則。精確匹配好于提升轉(zhuǎn)換,提升轉(zhuǎn)換好于標(biāo)準(zhǔn)轉(zhuǎn)換,標(biāo)準(zhǔn)轉(zhuǎn)換好于用戶自定義轉(zhuǎn)換。128) 從一個左值表達(dá)式中抽取值的過程就叫做左值向右值的轉(zhuǎn)換。左值轉(zhuǎn)右值算是精確匹配。129) 所有的標(biāo)準(zhǔn)轉(zhuǎn)換都被視為是等價的。所以當(dāng)有2個函數(shù)要求匹配他們的參數(shù)的時候,就會產(chǎn)生二義性,編譯器將標(biāo)記為錯誤。130) 枚舉不能作為int*空指針的轉(zhuǎn)換,即使枚舉值為0。131) 當(dāng)引用作為實參類型的時候,傳遞的是左值,類型是引用的對象的類型。132) 函數(shù)的形參是引用類型,這個類型不同于實參的類型,而實參不是引用類型的時候就會報錯。因為類型轉(zhuǎn)換產(chǎn)生的是一個臨時值,而臨時值不能const類型的,所以不能初始化該引用。133) 臨時值不能初始化非const類型的引用。如果引用前面加了const就可以了。134) 簡而言之對于引用參數(shù)來說如果實參是該引用的有效初始值則該實參是精確匹配如果該實參不是引用的有效初始值則不匹配。135) 函數(shù)重載解析:136) 候選函數(shù):1函數(shù)的聲明在候選點上可見;2函數(shù)實參的類型是在一個名字空間被聲明的,則該名字空間中與被調(diào)用函數(shù)同名的函數(shù)也被加入到候選函數(shù)中來。3.嵌套域中的聲明函數(shù)隱藏而不是重載了外圍域中的函數(shù),這個時候調(diào)用點上選擇的是嵌套域中的函數(shù)。4.使用using聲明的時候,會覆蓋掉全局域中的同名函數(shù),減少可選函數(shù)。但使用using指示符的時候,不論是放在函數(shù)內(nèi)部還是全局域中都不會覆蓋同名函數(shù)。137) 可選函數(shù):可行函數(shù)是這樣的函數(shù)對于每個實參都存在到函數(shù)參數(shù)表中相應(yīng)的參數(shù)類型之間的轉(zhuǎn)換。138) 在函數(shù)模板內(nèi)部定義聲明中的對象或類型不能與模板參數(shù)同名。全局變量名會被同名的模板參數(shù)覆蓋。139) 模板函數(shù)當(dāng)有多個參數(shù)的時候,關(guān)鍵字class或typename不能省略。140) 函數(shù)模板也可以聲明為inline或extern 但必須放在template標(biāo)簽之后。141) 模板實參推演,由函數(shù)實參的類型來決定模板實參的類型和值的過程。142) 模板函數(shù)在調(diào)用的時候可以通過顯示指定類型或通過判斷實參類型來實例化。143) 由于編譯器的強悍功能,所以盡可能的不要用顯示模板實參。144) 我們通過在模板定義中的關(guān)鍵字template 之前加上關(guān)鍵字export 來聲明一個可導(dǎo)出的函數(shù)模板當(dāng)函數(shù)模板被導(dǎo)出時我們就可以在任意程序文本文件中使用模板的實例而我們所需要做的就是在使用之前聲明該模板,比如引入其聲明頭文件。有的編譯器可能不需要這樣,但是標(biāo)準(zhǔn)c+要求這樣去做。145) C+模板編譯模式包含2種,包含模式和分離編譯模式。包含模式就是模板函數(shù)的聲明即是定義在一個頭文件中。而分離編譯模式聲明在一個頭文件中,實現(xiàn)在另外一個文本中,用關(guān)鍵字export來標(biāo)明并實現(xiàn)。146) 在顯示實例化聲明中,函數(shù)模板的定義必須被給出。如果該定義不可見,則該顯示實例化聲明是錯誤的。147) 模板顯示特化定義是指為函數(shù)模板實例化提供特別的定義。其實就是在函數(shù)模板實例化的情況下在前面加上template。148) 函數(shù)模板顯示特化的作用?與普通函數(shù)的區(qū)別,理論上沒有區(qū)別,但是模板的特化是非常有用的。它是一個在編譯期的條件判斷。當(dāng)編譯器在編譯時找到了符合的特化實現(xiàn),就會使用這個特化實現(xiàn)。這就叫編譯器多態(tài)(或者叫靜態(tài)多態(tài))。這種東西對編寫基礎(chǔ)庫是很有用的。這也就是為何c+的基礎(chǔ)庫大量使用了模板技術(shù),而且大量使用了特化,特別是偏特化。特化主要用于類模板,由于一個類模板上擁有或多或少的函數(shù)模板,這些模板不一定符合特殊場合的使用,這使用用全局特化或者偏特化的方式可以修改一點地方而不需要重寫這個類,有些資料也顯示普通函數(shù)的重載采用的最優(yōu)匹配方式比特化要來得完美,性能也高一點,但是在類模板上可以大大的提高擴展特性,現(xiàn)在許多庫就是通過這種方式適應(yīng)不同場合的使用的。其實感覺就是直接調(diào)用函數(shù)時候,編譯器很難根據(jù)實參去實例化模板函數(shù)。所以手動來特化有利于編譯器編譯的速度。有了顯示特化,函數(shù)模板不會在生成函數(shù)模板實例。149) 注意在選擇候選函數(shù)的時候,首先是對模板函數(shù)進(jìn)行實參推演。如果沒有合適的候選函數(shù),即使有特化的函數(shù)模板的實例適合也不能進(jìn)入候選函數(shù)。150) 實現(xiàn)了模板函數(shù),往往還要加入一個它的實例化的普通函數(shù)。因為當(dāng)有的函數(shù)的實參在調(diào)用的時候,由于模板函數(shù)實參推演失敗會導(dǎo)致沒有候選函數(shù),這個時候普通函數(shù)卻可以通過標(biāo)準(zhǔn)轉(zhuǎn)換等來完成。即保證了一定有候選函數(shù)。151) 函數(shù)模板中的子函數(shù)調(diào)用的時候。如果與模板參數(shù)無關(guān),則名字解析是在函數(shù)模板定義的時候解析的。如果是有關(guān)的話,則是在函數(shù)模板實例化的時候解析的。152) 當(dāng)一個函數(shù)被聲明成為friend。他就可以引用類的私有數(shù)據(jù)成員。153) 異常處理是一種允許兩個獨立開發(fā)的程序組件在程序執(zhí)行期間遇到程序不正常的情況稱為異常exception 時相互通信的機制。154) Try引入一個局部域,在try中聲明的變量在其它地方不可以引用即使在catch中。155) 使用引用類型的異常聲明catch 子句能夠修改異常對象但是由throw 表達(dá)式指定的任何變量仍都不受影響。引用只能修改到throw表達(dá)式創(chuàng)建的異常對象,如果不是創(chuàng)建的比如全局變量就仍然不受影響。注意catch中如果再拋出throw異常,要注意catch()中的對象是否是引用,如果是引用就拋出它自己?;蛘呔蛼伋龅氖莟ry中的異常拋出的對象。156) Catch all:catch()可以捕獲任何類型的異常,當(dāng)它與catch并列存在的時候一定要放最后一個,或者要報錯。其它的catch按捕獲順序來,如果獲得一個就不執(zhí)行其它的catch了。157) 異常規(guī)范exception specification 提供了一種方案它能夠隨著函數(shù)聲明列出該函數(shù)可能拋出的異常它保證該函數(shù)不會拋出任何其他類型的異常。異常聲明是函數(shù)接口的一部分,它必須在頭文件的函數(shù)聲明上指定。不同地方的同一個函數(shù)聲明必須帶上異常規(guī)范,如果其中一個有。切不能累加。當(dāng)拋出了不能被識別的異常時候,會調(diào)用在編譯的時候就設(shè)置好的unexpected function,默認(rèn)會去調(diào)用terminate()退出。空的異常規(guī)范保證函數(shù)不會拋出任何異常。如果函數(shù)沒有指定異常規(guī)范意味著該函數(shù)可以拋出任何類型的異常。158) 函數(shù)指針作為參數(shù)被引用的時候不能被內(nèi)聯(lián),影響效率。所以出現(xiàn)了函數(shù)對象。函數(shù)對象是一個類它重載了函數(shù)調(diào)用操作符operator() 該操作符封裝了通常應(yīng)該被實現(xiàn)為一個函數(shù)的動作典型情況下函數(shù)對象被作為實參傳遞給泛型算法當(dāng)然我們也可以定義獨立的函數(shù)對象。159) 函數(shù)適配器用于指定函數(shù)對像的單個參數(shù)或者取反操作。改變默認(rèn)必須是2元關(guān)系的函數(shù)對象。Binder和negator。參考c+ primer third version 泛型算法12.3.5。160) C+語言要求綁定在const vector 上的iterator 也必須是const iterator。const 容器只能被綁定在const iterator 上這樣的要求與const 指針只能指向const 數(shù)組的行為一樣在兩種情況下C+語言都努力保證const 容器的內(nèi)容不會被改變。161) 關(guān)聯(lián)容器map和set在內(nèi)部維護(hù)元素的排序順序,一邊快速查找和獲取。因為不允許在上面應(yīng)用重新排序的泛型算法。如果要排序必須先將他們拷貝到順序容器vector或list中。162) List是雙向鏈表,它保存有指向上和下一個鏈表元素的鏈成員??梢园言夭迦氲絣ist的任意位置上或刪除,但是不能隨機訪問。不是連續(xù)的分配內(nèi)存。163) 除了靜態(tài)成員以外的類的數(shù)據(jù)成員不能在類體中被顯示初始化。164) 只有當(dāng)一個類的類體完整的時候,它才被視為已經(jīng)定義。所以一個類不能有自身類型的數(shù)據(jù)成員。但當(dāng)一個類的類頭被看到的時候,就已經(jīng)聲明了,所以可以把自身類型的指針或引用作為數(shù)據(jù)成員。165) 雖然每個類對象都有自己的類數(shù)據(jù)成員拷貝但是每個類成員函數(shù)的拷貝只有一份.他們是靠this指針來區(qū)分這不同的對象的數(shù)據(jù)的。166) 類的成員函數(shù)如果聲明成常類型的話,放在參數(shù)表和函數(shù)體之間。任何修改類數(shù)據(jù)成員的函數(shù)都不能被聲明為const。但是如果聲明了可以修改類的指針成員指向的對象的值。const 成員函數(shù)可以被相同參數(shù)表的非const 成員函數(shù)重載例,調(diào)用時候根據(jù)類是不是定義為const來匹配函數(shù)。一個const 類對象從構(gòu)造完成時刻到析構(gòu)開始時刻這段時間內(nèi)被認(rèn)為是const。167) 當(dāng)把一個類的數(shù)據(jù)成員聲明成為mutable的時候。它永遠(yuǎn)都不會是const,可以隨意修改。168) This指針。每個類成員函數(shù)都含有一個指向被調(diào)用對象的指針這個指針被稱為this。一般情況不需要顯示引用this指針。在類的成員函數(shù)中返回自己 return *this。169) 點操作符和箭頭操作符是左結(jié)合的。170) 靜態(tài)成員和非靜態(tài)的比較。靜態(tài)成員的類型可以是其所屬類的對象,而份非靜態(tài)只能是該類的對像的指針或引用。靜態(tài)數(shù)據(jù)成員可以作為類成員函數(shù)的實參,而非static成員不能。171) 靜態(tài)成員函數(shù)不能聲明為const或valatile,不能在類的外部聲明,沒有this指針,所以不能類的非靜態(tài)數(shù)據(jù)成員。172) 一般的函數(shù)指針不能賦值為類的成員函數(shù),因為缺少this指針。173) 成員數(shù)據(jù)指針的格式 : type classname:* point_name=&classname:member_data174) 成員函數(shù)指針的格式 : return_Type (Class_Name:*Function_Point_Name)()=&Class_Name:Member_Function_Name175) 靜態(tài)數(shù)據(jù)成員指針不需要指定類名,和普通指針一樣。176) Union類,union類的數(shù)據(jù)成員可以是private或public。Union類不能有靜態(tài)數(shù)據(jù)成員或是引用成員。不能有帶有構(gòu)造函數(shù)或析構(gòu)函數(shù)或拷貝賦值操作符的類作為成員類型。Union中的數(shù)據(jù)成員的存儲開始位置都一樣,任意的賦值都會覆蓋以前的數(shù)據(jù),其存儲區(qū)的大小取決于最大的成員的類型。讀取的時候只可以訪問被賦值的那個變量。177) 匿名union的數(shù)據(jù)成員可以在定義匿名union的域中被直接訪問。178) Union是一種節(jié)省空間的類,bit_field是一種節(jié)省空間的成員。179) &操作符不能應(yīng)用在位域上,沒有指向位域的指針,位域也不能使類的靜態(tài)成員。180) 在類定義中用到的名字必須在使用前被聲明,但是有2種例外。一種是內(nèi)聯(lián)函數(shù)的函數(shù)體中,第二種是被用作缺省實參的名字,但是該數(shù)據(jù)成員必須是static的。181) 在類外部定義在內(nèi)部通過typedef聲明的數(shù)據(jù)成員的時候必須在該數(shù)據(jù)成員前面也加類:。182) 嵌套類之間不能相互訪問對方的私有數(shù)據(jù)成員。除非被對方聲明為友元類。Friend class class_name.183) 嵌套類的數(shù)據(jù)成員含私有數(shù)據(jù)成員可以在外部被定義。嵌套類可以在外部定義,但是必須在父類中聲明。注意,嵌套類的外部定義和類的繼承格式很像。184) 定義在類外部的子嵌套類不能訪問父類的非靜態(tài)成員,必須通過類對象的引用或指針。見c+ primer,page 556。185) 在嵌套域的內(nèi)部可以直接訪問public類型的靜態(tài)成員,枚舉值,類型名。其中類型名包括:typedef名字,枚舉類型名字,類名字。但是在外部的時候必須加類名字空間,枚舉值可以不用。因為枚舉類型沒有像類一樣維護(hù)自己的類域。186) 被定義在函數(shù)體內(nèi)的類,叫做局部類。不能被外部的變量訪問,所以也沒有靜態(tài)成員。187) 當(dāng)類是有默認(rèn)構(gòu)造函數(shù)初始化的時候,一般認(rèn)為是沒有被初始化。188) 顯示初始表初始化類的時候,它的所有數(shù)據(jù)成員必須是公有的。189) 類的構(gòu)造函數(shù)不能指定返回類型,也不能指定void類型。190) 類的構(gòu)造函數(shù)不能被const和volatile修飾。191) Explicit關(guān)鍵字只能用來修飾構(gòu)造函數(shù),切提醒構(gòu)造函數(shù)不要提供隱式轉(zhuǎn)換。192) 不是每個類都必須要析構(gòu)函數(shù)。如果類成員都是值類型的成員則不需要析構(gòu)函數(shù)。193) 只有當(dāng)delete表達(dá)式的指針指向一個帶有析構(gòu)函數(shù)的類時,編譯器才會調(diào)用析構(gòu)函數(shù)。194) 類的數(shù)據(jù)成員,const類型或引用類型的時候必須在成員初始化表中完成。因為這2個在構(gòu)造函數(shù)開始的時候必須已經(jīng)初始化完成。其它類型的數(shù)據(jù)成員在構(gòu)造函數(shù)或成員初始化表中都無影響。195) 初始化的順序是按照類的成員定義的順序來進(jìn)行的,和初始化表中的變量順序沒有關(guān)系。但是初始化表中的最遲一個都早于構(gòu)造函數(shù)內(nèi)部的第一個。成員之間的賦值最好是放在構(gòu)造函數(shù)內(nèi)部。196) 一般最好是在成員初始化表中初始化類的所有類對象。197) c+重大的一個缺陷就是不能有效的返回類對象,即是不能返回局部對象的引用或指針。其解決辦法是使用了返回值語言擴展技術(shù),說白了就是把結(jié)果作為一個引用變量傳入進(jìn)去。198) 函數(shù)重載的時候,const關(guān)鍵字放最后面,但是要放花括號之前。199) 只有左操作數(shù)是類類型的時候才會考慮類的重載函數(shù)。200) 操作符重載時,類成員和名字空間成員的選擇。操作符的左操作數(shù)不是類對象類型的時候,必須用名字空間成員。即是2個參數(shù)。C+要求,=,(),-操作符必須被定義為類操作符。201) 程序員只能為類類型或枚舉類型的操作數(shù)定義重載操作符202) 操作符預(yù)定義的操作數(shù)個數(shù)arity 必須被保留例如一元的邏輯非操作符不能被定義為針對兩個String 對象的二元操作符. 四個預(yù)定義的操作符+ - * 和& 既可被用作一元操作符也可被用作二元操作符.除了operator()以外,其它操作符提供默認(rèn)實參是非法的。203) 友元聲明以關(guān)鍵字friend 開始它只能出現(xiàn)在類定義中因為友元不是授權(quán)類的成員所以它不受其所在類的聲明區(qū)域public private 和protected 的影響這里我們選擇把所有友元聲明組織在一起并放在類頭之后。204) 一個類必須把它希望與之建立友元關(guān)系的重載函數(shù)集中的每個函數(shù)都聲明為友元, 如果一個函數(shù)操縱兩個不同類類型的對象而且該函數(shù)需要訪問這兩個類的非公有成員則這個函數(shù)可以被聲明為這兩個類的友元或者作為一個類的成員函數(shù)并聲明為另一個類的友元。205) 只有當(dāng)一個類的定義已經(jīng)被看到時它的成員函數(shù)才能被聲明為另一個類的友元。如果2個類需要相互把對方的成員函數(shù)作為自己的一個友元,那么可以把類直接聲明成為友元。206) C+默認(rèn)內(nèi)置數(shù)據(jù)類型都是有符號的,所以最左邊的那位都會被當(dāng)作符號位,僅僅用來標(biāo)識正負(fù)關(guān)系。207) 機器字表示機器一次性處理的長度,比如32位機就表達(dá)一次性處理32BIT,即是3個機器字節(jié)。在32位機子中:Char占用一個機器字節(jié)。Short半個機器字(2字節(jié)),int占用一個機器字(4字節(jié)),long和int長度一樣,但是其它機器中,long是2個機器字。Float單精度1個機器字,double雙精度2個機器字,long double三或四個機器字。以u結(jié)尾的表示無符號,以L結(jié)尾的int表示長整形,以L結(jié)尾的浮點型表示擴展精度。以f 結(jié)尾的表示單精度,以e結(jié)尾的表示雙精度。默認(rèn)是十進(jìn)制,前面加0表示8進(jìn)制,前面加0X表示十六進(jìn)制。Unsigned int,表示無符號整型.signed int表示有符號整型。208) 轉(zhuǎn)換函數(shù)是一種特殊類型的類的成員函數(shù)。他把一種類型轉(zhuǎn)換成另外一種類型。;格式是operator 類型().不能指定返回類型和參數(shù)表。209) 如果需要編譯器會在調(diào)用構(gòu)造函數(shù)執(zhí)行用戶定義的轉(zhuǎn)換之前在實參上應(yīng)用標(biāo)準(zhǔn)轉(zhuǎn)換序列。210) 如果實參是一個類類型的對象類類型的指針類類型的引用或者指向類成員的指針并且該類類型是在一個用戶聲明的名字空間中被聲明的則在該名字空間中聲明的與函數(shù)調(diào)用同名的函數(shù)也被加入到候選函數(shù)集中;如果實參是一個類類型的對象類類型的指針類類型的引用或者指向類成員的指針并且該類有與函數(shù)調(diào)用同名的友元friend 函數(shù)則該友元函數(shù)被加入到候選函數(shù)集中。211) 如果一個函數(shù)調(diào)用的實參是一個類類型的對象類類型的指針類類型的引用或者是指向類成員的指針則候選函數(shù)是以下各個函數(shù)集合的并集在調(diào)用點可見的函數(shù)在定義該類的名字空間中聲明的函數(shù)以及在類成員表中聲明為友元的函數(shù)。212) 調(diào)用點可見的候選函數(shù)集只包含名字解析成功的域中聲明的函數(shù)。即使外部域中有可用函數(shù),也不作為候選函數(shù)。前面的函數(shù)如果都不是可選函數(shù),那么編譯會提示出錯。213) 標(biāo)準(zhǔn)轉(zhuǎn)換序列總是好于用戶定義的轉(zhuǎn)換序列, 用戶定義的轉(zhuǎn)換序列中只能有一個用戶定義的轉(zhuǎn)換所以在第一個用戶定義的轉(zhuǎn)換之后只能考慮標(biāo)準(zhǔn)轉(zhuǎn)換。如果兩個用戶定義的轉(zhuǎn)換序列使用了相同的轉(zhuǎn)換函數(shù)則轉(zhuǎn)換函數(shù)后面的標(biāo)準(zhǔn)轉(zhuǎn)換的等級被作為選擇最佳用戶定義轉(zhuǎn)換序列的依據(jù)。因為兩個用戶定義的轉(zhuǎn)換序列使用了不同的轉(zhuǎn)換函數(shù)所以不能判定哪個函數(shù)對該調(diào)用有最佳的參數(shù)類型標(biāo)準(zhǔn)轉(zhuǎn)換序列的等級也不能被用來判定最佳轉(zhuǎn)換序列以及最佳參數(shù)類型所以該調(diào)用被編譯器標(biāo)記為二義的。214) 重載解析與成員函數(shù)。不像名字空間函數(shù)成員函數(shù)在類成員表中只能被聲明一次。215) Const與函數(shù)重載解析。Const對象只能調(diào)用const非靜態(tài)函數(shù)。靜態(tài)成員函數(shù)從不會因為被調(diào)對象或指針的限定修飾符const 或volatile而被排除在可行函數(shù)集之外靜態(tài)成員函數(shù)被認(rèn)為匹配它所在類類型的任何對象或指針。216) 類模板被視為一個鏈表。Typename是在標(biāo)準(zhǔn)c+中才引入的,為了幫助編譯器區(qū)分參數(shù)到底是類還是類型變量。標(biāo)準(zhǔn)c+之前的模板參數(shù)不支持缺省實參。217) 模板定義和定義都可以引用類的模板或類模板的實例,但是在模板定義的上下文環(huán)境之外,只能使用類模板實例。218) 標(biāo)準(zhǔn)c+中,聲明一個類模板實例的指針或引用不會導(dǎo)致模板被實例化;定義一個類時需要知道該類的定義。因為編譯器需要知道其大小以便為其分配內(nèi)存。另外,只有就是在解引用或調(diào)用數(shù)據(jù)成員、成員函數(shù)的時候才能實例化類模板。219) 類模板的參數(shù)如果是非類型的參數(shù),那它的類型必須是常量表達(dá)式、const對象的值,名字空間中對象的地址、對象的大小。而new表達(dá)式,非const變量的值都不能作為參數(shù)。220) 類模板實例化的時候,類型參數(shù)和非類型參數(shù)之間可以進(jìn)行轉(zhuǎn)換。但是必須是下面的這些情況。(1)左值轉(zhuǎn)換:左值到右值的轉(zhuǎn)換,數(shù)組到指針的轉(zhuǎn)換,函數(shù)到指針的轉(zhuǎn)換;(2)限定修飾符轉(zhuǎn)換:從指針類型到常指針類型的轉(zhuǎn)換;(3)提升:從長度小的到長度大的類型;(4)整型之間的轉(zhuǎn)換221) 0不能通過隱式轉(zhuǎn)換成指針,可以通過static_cast來顯式完成。222) 類模板的成員函數(shù)本身也是一個模板。標(biāo)準(zhǔn)c+要求這樣的成員函數(shù)只有在被調(diào)用或者取地址的時候才被實例化。223) 類模板中可以使用的友元聲明。(1) 非模板友元類或友元函數(shù),一個類的成員在被聲明成為類的友元之前必須讓其類已經(jīng)被定義;(2)綁定的友元類模板或函數(shù)模板,1對1的關(guān)系;(3)非綁定的友元類模板或函數(shù)模板,1對多的關(guān)系,標(biāo)準(zhǔn)c+才支持這種。注意第二種方法,類部申明友元的時候,在函數(shù)的名字后面和小括號的前面必須加。224) 注意第222條款,使用方法2必須在最頂部聲明類和友元函數(shù)的名字,因為他們在交叉使用容易出錯。當(dāng)使用operator的友元函數(shù)要注意在后面還要加.使用方法3僅僅需要注意2個模板參數(shù)的名字不能一樣。225) 類模板聲明為友元有2種情況:1是將類模板的雖有實例化對象都聲明為當(dāng)前類模板的友元,2是只聲明指定類型的類模板為當(dāng)前的友元。226) 類的友元函數(shù)不屬于類,所以不能用public,private,protected等來修飾。如果有這些修飾符存在。那么應(yīng)該放在他們的外邊。227) 類模板的靜態(tài)數(shù)據(jù)成員。只有當(dāng)程序使用靜態(tài)數(shù)據(jù)成員時它才會從模板定義中被真正實例化類模板的靜態(tài)成員本身就是一個模板靜態(tài)數(shù)據(jù)成員的模板定義不會引起任何內(nèi)存被分配只有對靜態(tài)數(shù)據(jù)成員的某個特定的實例才會分配內(nèi)存每個靜態(tài)數(shù)據(jù)成員實例都與一個類模板實例相對應(yīng)因此一個靜態(tài)數(shù)據(jù)成員的實例在被引用的時候總是要通過一個特定的類模板實例。228) 類模板與嵌套類,嵌套類不會在父類實例化的時候就實例化。除非是被解引用等操作。標(biāo)準(zhǔn)c+中,類模板支持函數(shù)模板和類模板作為自己的一個元素。229) 如果一個成員模板被定義在類模板定義之外則在它的定義前面就必須加上類模板參數(shù)表然后再跟上它自己的模板參數(shù)表. 模板參數(shù)不一定與類模板定義中指定的名字相同.230) C+模板編譯模式.(1) 包含編譯模式:成員函數(shù)和靜態(tài)成員的定義必須被包含在和類模板的至少同一個文件中。 (2) 分離編譯模式:類模板定義和其inline成員函數(shù)定義都被放在頭文件中,而非inline成員函數(shù)和靜態(tài)數(shù)據(jù)成員被放在程序文本中。但是這個類模板必須定義為export,其靜態(tài)數(shù)據(jù)和成員函數(shù)也可以聲明為export,但是在程序中只能被聲明一次。231) 顯示實例化類模板 template class Name,它的所有成員也都會被實例化,所以這個時候需要類提供所有成員的定義。232) 類模板部分特化,在類名字后面加了。并在里面指定了部分實參。當(dāng)存在類模板部分特化的時候,會優(yōu)先調(diào)用這個模板。但是必須為其提供構(gòu)造函數(shù)。233) 類模板中的名字解析。234) 多臺是指基類的指針或引用操縱多個類型(基類的派生類)的能力。235) 動態(tài)綁定是在運行時刻解析出需要被調(diào)用的函數(shù)。C+實現(xiàn)這種機制的原理是使用了一種虛擬函數(shù)。缺省情況下,函數(shù)是在編譯時刻靜態(tài)解析。236
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB23-T2968-2021-大棚中果型西瓜栽培技術(shù)規(guī)程-黑龍江省
- DB23-T2946-2021-櫻花育苗技術(shù)規(guī)程-黑龍江省
- 宿州小區(qū)門崗管理制度
- 培訓(xùn)機構(gòu)用工管理制度
- 農(nóng)場水管清理方案(3篇)
- 乙炔氣柜檢修方案(3篇)
- 貿(mào)易企業(yè)審計方案(3篇)
- 密閉容器管道管理制度
- 初中教育機構(gòu)管理制度
- 裝修工人團建方案(3篇)
- 弱電智能化設(shè)計制圖規(guī)范
- 大學(xué)體育 1(體育導(dǎo)論)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 無創(chuàng)呼吸機使用技術(shù)操作評分標(biāo)準(zhǔn)
- 創(chuàng)新思維與創(chuàng)業(yè)實驗-東南大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 浙江高等教育崗前培訓(xùn)考試題目-大學(xué)心理學(xué)1-20套
- 人教版五年級下數(shù)學(xué)周末練習(xí)題13(分?jǐn)?shù)加減法)
- 挖掘機、裝載機檢驗報告完整
- 2022下半年上海市英語模擬題【帶答案】
- 抗菌藥物臨床應(yīng)用指導(dǎo)原則(2023年版)
- 金蝶云星空 V7.2-產(chǎn)品培訓(xùn)-供應(yīng)鏈-庫存管理
- 國開電大專科《管理英語1》機考總題庫
評論
0/150
提交評論