Crimer初學(xué)者可看筆記_第1頁(yè)
Crimer初學(xué)者可看筆記_第2頁(yè)
Crimer初學(xué)者可看筆記_第3頁(yè)
Crimer初學(xué)者可看筆記_第4頁(yè)
Crimer初學(xué)者可看筆記_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C + + p r i m e r 第一章 快速入門學(xué)習(xí)了一個(gè)C+程序最基本的框架,和如何完成一個(gè)完整的程序編程。了解已初始化和未初始化變量的區(qū)別。初始化是一個(gè)很重要的概念,貫穿了 c+ 始終。在程序變的很復(fù)雜之前學(xué)會(huì)做好注釋,在C+中使用/表示注釋內(nèi)容。初步接觸了 while 語(yǔ)句, for 語(yǔ)句, if 語(yǔ)句。While 語(yǔ)句提供了迭代執(zhí)行功能。 while ( Condition )while_body_statement ;For 語(yǔ)句可以簡(jiǎn)化管理循環(huán)變量的代碼。 for (一個(gè)初始化語(yǔ)句,一個(gè)條件,一個(gè) 表達(dá)式 ) ;If 語(yǔ)句用來轉(zhuǎn)折編程。 if (Condition) else

2、;類機(jī)制是C+中最重要的特征之一,我們通過定義類來定義自己的數(shù)據(jù)結(jié)構(gòu)。需要注意的是標(biāo)準(zhǔn)庫(kù)的頭文件用尖括號(hào)<>括起來,而像自定義的類這種非標(biāo)準(zhǔn)庫(kù)的頭文件用雙引號(hào)“”括起來。類可以執(zhí)行很多操作符,例如 + = << >>。第二章 變量和基本類型(1) 基本內(nèi)置類型:表示整數(shù),字符,和布爾值的算術(shù)類型合稱整型。除了bool 型外的整型又分帶符號(hào)和無符號(hào)類型。類型 float , double 和 long double 都是 浮點(diǎn)型。單精度浮點(diǎn)型只能保證 6位有效數(shù)字,而雙精度可以保證 10 位有效數(shù)字。(2)字面值常量:整型字面值規(guī)則,可以是使用十進(jìn)制,八進(jìn)制,

3、十六進(jìn)制。浮點(diǎn)字面值規(guī)則可以用十進(jìn)制或者是科學(xué)計(jì)數(shù)法來表示浮點(diǎn)字面值常量。Bool 字面值和字符字面值是 true false 。字符串字面值常量用雙引號(hào)括起來的零個(gè)或者多 個(gè)字符表示。多行字面值可以再一行的末尾家一反斜杠符號(hào)可將此行和下行當(dāng)做 一行處理 ( 3)變量:變量是提供了程序可以操作的有名字的存儲(chǔ)區(qū)。而變量名是變量的標(biāo) 識(shí)符??梢杂勺帜?, 數(shù)字和下劃線組成。 變量名必須是由字母或者下劃線開頭的, 并且區(qū)分大小寫。( 4) const 限定符:定義 const 對(duì)象是把一個(gè)對(duì)象轉(zhuǎn)化成一個(gè)常量。因?yàn)槌A吭?定義后不能被修改,所以定義是必須初始化。(5)引用:引用就是對(duì)象的另一個(gè)名字,是一

4、種復(fù)合類型,通過在變量名前添加 “&”符號(hào)來定義。( 6) typedef 名字: typedef 可以用來定義類型的同義詞。一般使用 typedef 有 三種目的, 1. 為了隱藏特定類型的實(shí)現(xiàn),強(qiáng)調(diào)使用類型的目的。 2. 簡(jiǎn)化復(fù)雜的類 型定義,使其更易理解。 3. 允許一種類型用于多個(gè)目的,同時(shí)使得每次使用該類 型的目的明確。(7)枚舉:enum枚舉類型名枚舉成員1,枚舉成員2;(8)類類型:C+中通過定義類來自定義數(shù)據(jù)類型。類定義了該類型的對(duì)象包含 的數(shù)據(jù)和該類型的對(duì)象可執(zhí)行的操作。定義了一關(guān)鍵字 class 開始,其后是該類 的名字標(biāo)識(shí)符。類體位于花括號(hào)里面,花括號(hào)后,面必須要

5、跟一個(gè)分號(hào)。第三章 標(biāo)準(zhǔn)庫(kù)類型1. 命名空間的 using 聲明:使用 using 說明就可以在不需要加前綴 namespace_name:的情況下訪問命名空間中的名字。如果在頭文件中放置 using 聲明,就相當(dāng)于在包含該頭文件的每個(gè)程序中都放置了同一 using 聲明,不論該 程序是否需要 using 聲明。2. 標(biāo)準(zhǔn)庫(kù) string 類型: string 類型支持長(zhǎng)度可變的字符串, 標(biāo)準(zhǔn)庫(kù) string 類型 的目的就是滿足對(duì)字符串的一般應(yīng)用3. 標(biāo)準(zhǔn)庫(kù) vector 類型: vector 是同一種類型的對(duì)象的集合, 每個(gè)對(duì)象都有一個(gè)對(duì) 應(yīng)的整數(shù)索引值,我們一般把 vector 稱作容器

6、。 vector 是一個(gè)類模板。使用模 板可以編寫一個(gè)類定義或函數(shù)定義,而用于多個(gè)不同的數(shù)據(jù)類型。4 標(biāo)準(zhǔn)庫(kù) bitset 類型:標(biāo)準(zhǔn)庫(kù)提供的 bitset 類簡(jiǎn)化了位集的處理。 類似于 vector , bitset 類是一種類模板,而與 vector 不同的是 bitset 類型對(duì)象的區(qū)別僅在其長(zhǎng) 度而不在其類型。第四章 語(yǔ)句1.if 語(yǔ)句: if 語(yǔ)句根據(jù)特定表達(dá)式是否為真來有條件的執(zhí)行另一語(yǔ)句。If 語(yǔ)句有兩種形式,一種有帶 else 分支,而另一種則沒有。2.switch 語(yǔ)句: switch 語(yǔ)句提供了一種更方便的方法來實(shí)現(xiàn)深沉嵌套的if/else邏輯。在 switch 語(yǔ)句中,漏

7、寫 break 語(yǔ)句是常見的程序錯(cuò)誤。但是 break 語(yǔ)句, 也要慎用,并不是總是恰當(dāng)?shù)?。在switch語(yǔ)句中,default標(biāo)號(hào)提供了相當(dāng)于else 子句的功能。3. while 語(yǔ)句:當(dāng)條件為真的時(shí)候, while 語(yǔ)句反復(fù)執(zhí)行目標(biāo)語(yǔ)句。再循環(huán)條件中 定義的變量在每次的循環(huán)里面都要經(jīng)歷創(chuàng)建和撤銷的過程。4. for 語(yǔ)句: for 語(yǔ)句的語(yǔ)法形式是: for (init-statement; condition ;expression ) statement 。5. do while語(yǔ)句:該語(yǔ)句保證了循環(huán)體至少執(zhí)行一次。 do statement while(condition );分號(hào)

8、一定不能忘了。6. break 語(yǔ)句:break 語(yǔ)句用在結(jié)束最近的 while,do while ,for ,switch 語(yǔ)句, 并將程序的執(zhí)行權(quán)傳遞給緊接在被終止語(yǔ)句之后的語(yǔ)句7.continue 語(yǔ)句: continue 語(yǔ)句導(dǎo)致最近的循環(huán)語(yǔ)句的當(dāng)次迭代提前結(jié)束。 對(duì)于while 和 do while 語(yǔ)句,繼續(xù)求解循環(huán)條件。而對(duì)于 for 循環(huán),程序流程接著求 解 for 語(yǔ)句頭中的 exp 表達(dá)式。8.goto 語(yǔ)句:由于所有 goto 的程序都可以改寫成為不用 goto 語(yǔ)句,所以,也沒 有必要再使用 goto 語(yǔ)句了。第五章 函數(shù)1. 函數(shù)的定義:所謂的函數(shù)就是由函數(shù)名以及一組

9、操作數(shù)類型唯一的表示。函數(shù) 的操作數(shù)就是形參,在一對(duì)圓括號(hào)中聲明,形參與形參之間以逗號(hào)隔離。而所謂 的函數(shù)調(diào)用就是使用調(diào)用操作符()實(shí)現(xiàn)函數(shù)的調(diào)用。函數(shù)的調(diào)用其實(shí)就是做了 兩件事情:用對(duì)應(yīng)的實(shí)參初始化函數(shù)的形參,并將控制權(quán)轉(zhuǎn)移給被調(diào)用的函數(shù)。 形參與實(shí)參的差別在于形參是在函數(shù)的形式表中定義的,并由調(diào)用函數(shù)是傳遞給 函數(shù)的實(shí)參初始化。2. 定義函數(shù)的一般形式:定義無參函數(shù)的一般形式:類型標(biāo)識(shí)符 函數(shù)名() 聲 明部分 語(yǔ)句 定義有參函數(shù)的一般形式: 類型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)列表) 聲明部分 語(yǔ)句 。3. 函數(shù)的參數(shù)和函數(shù)的值: 其實(shí)在定義函數(shù)時(shí)指定的形參, 在未出現(xiàn)函數(shù)調(diào)用時(shí), 它們并不占內(nèi)

10、存中的存儲(chǔ)單元,因此才稱它們是形式參數(shù)或虛擬參數(shù),表示它們 并不是實(shí)際存在的數(shù)據(jù),只有在函數(shù)發(fā)生調(diào)用時(shí),函數(shù)中的形參才被分配內(nèi)存單 元,一遍接收從實(shí)參傳來的數(shù)據(jù)。在每一次的調(diào)用結(jié)束后,形參所占的內(nèi)存單元 也會(huì)被釋放。實(shí)參可以是常量,變量或者表達(dá)式。而在定義函數(shù)時(shí),必須在函數(shù) 首部指定形參的類型,在函數(shù)的調(diào)用過程中,實(shí)參與形參的類型應(yīng)相同或賦值兼 容,實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是值傳遞,單向傳遞,只有實(shí)參傳給形參,return 語(yǔ)句獲得,函數(shù)不能由形參傳回給實(shí)參。函數(shù)的返回值就是通過函數(shù)中的 的類型決定返回值的類型。4. 函數(shù)的調(diào)用:函數(shù)的調(diào)用方式一般用三種,一、函數(shù)語(yǔ)句。二、函數(shù)表達(dá)式。 三

11、、函數(shù)參數(shù)。想要調(diào)用一個(gè)函數(shù)要具備以下的幾個(gè)條件:首先被調(diào)用的函數(shù)必 須是已經(jīng)存在的。如果使用到庫(kù)函數(shù),記得在開頭用 #include 包含進(jìn)來。如果使 用用戶自己定義的函數(shù),而該函數(shù)與調(diào)用它的函數(shù)在同一程序單位中,且位置在 主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前對(duì)被調(diào)用的函數(shù)作聲明。5. 內(nèi)置函數(shù):這是C+提供的一種可以提高效率的方法,在編譯時(shí)將所調(diào)用函數(shù)的代碼直接嵌入主調(diào)函數(shù)中,而不是將流程轉(zhuǎn)出去。指定內(nèi)置函數(shù)的方法只需在函 數(shù)首行的左端加一個(gè)關(guān)鍵字 inline 即可。內(nèi)置函數(shù)雖然能節(jié)省運(yùn)算時(shí)間,但是會(huì) 增加目標(biāo)程序的長(zhǎng)度。因此只將規(guī)模小的函數(shù)聲明成內(nèi)置函數(shù)。6. 函數(shù)的重載:C+允許用同

12、一個(gè)函數(shù)名定義多個(gè)函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和類 型不同。這就是函數(shù)的重載。是一個(gè)函數(shù)名可以多用,有不同的含義。7. 函數(shù)的模板:所謂的函數(shù)的模板,實(shí)際上就是建立一個(gè)通用函數(shù),其函數(shù)類型 和形參類型不具體指定, 用一個(gè)虛擬的類型來代表。 這個(gè)通用函數(shù)就是函數(shù)模板。 凡是函數(shù)體相同的函數(shù)都可以用這個(gè)模板來代替,不必定義多個(gè)函數(shù),只需要在 模板中定義一次即可。在調(diào)用函數(shù)系統(tǒng)會(huì)根據(jù)實(shí)參的類型來取代模板中的虛擬類 型,從而實(shí)現(xiàn)了不同函數(shù)的功能。定義函數(shù)模板的一般形式為 template type name T或template vclass T。用函數(shù)模板比函數(shù)重載更方便,程序更簡(jiǎn)潔。但是只適用于函數(shù)的

13、參數(shù)個(gè)數(shù)相同而類型不同。8. 有默認(rèn)參數(shù)的函數(shù):有時(shí)候在主函數(shù)調(diào)用別的被調(diào)函數(shù)時(shí),使用同樣的實(shí)參, 因此可在定義函數(shù)的時(shí)候給形參一個(gè)默認(rèn)值。 這樣可以簡(jiǎn)化編程, 提高運(yùn)行效率 一個(gè)函數(shù)不能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù),因?yàn)楹苋菀壮霈F(xiàn)二義 性。9. 函數(shù)的嵌套調(diào)用:C+不允許對(duì)函數(shù)作嵌套定義,也就是說在一個(gè)函數(shù)中不能完 整地包含另一個(gè)函數(shù)。在一個(gè)程序中每一個(gè)函數(shù)的定義都是互相平行很獨(dú)立的。 雖然布恩那個(gè)嵌套定義函數(shù),但是可以嵌套調(diào)用函數(shù)。10. 函數(shù)的遞歸調(diào)用: 在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本 身。這就是函數(shù)的遞歸調(diào)用。11. 局部變量和全局變量:所謂的局部變量就

14、是在一個(gè)函數(shù)內(nèi)部定義的變量,只在 本函數(shù)范圍內(nèi)有效,只能在本函數(shù)內(nèi)才能使用。全局變量是在函數(shù)之外定義的變 量。全局變量的有效范圍為從定義變量的位置開始到本源文件結(jié)束。12. 變量的存儲(chǔ)類型:分為兩種,靜態(tài)和動(dòng)態(tài)存儲(chǔ)。所謂的靜態(tài)存儲(chǔ)方式是指在程 序運(yùn)行期間,系統(tǒng)對(duì)變量分配固定的存儲(chǔ)空間。而動(dòng)態(tài)存儲(chǔ)方式則是在程序運(yùn)行 期間,系統(tǒng)對(duì)變量動(dòng)態(tài)地分配存儲(chǔ)空間。前面提到的全局變量就是存放在靜態(tài)存 儲(chǔ)區(qū)中,在程序執(zhí)行的過程中它們占據(jù)固定的存儲(chǔ)單元。在動(dòng)態(tài)存儲(chǔ)區(qū)中存放的 是函數(shù)形式參數(shù),和函數(shù)中的自動(dòng)變量,以及函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址 等??梢允褂?static 將局部變量變?yōu)殪o態(tài)局部變量。靜態(tài)局部變量

15、在靜態(tài)存儲(chǔ)區(qū) 內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。第六章 數(shù)組與字符串1. 數(shù)組的定義:數(shù)組是一組相同類型的數(shù)據(jù)的集合,他們占用連續(xù)的存儲(chǔ)單元, 數(shù)組中的每個(gè)數(shù)據(jù)稱為一個(gè)元素。2. 一維數(shù)組定義:數(shù)組的三要素是其名稱,以及每個(gè)元素的數(shù)據(jù)類型,還有就是 必須是常量表達(dá)式的數(shù)據(jù)個(gè)數(shù)。在定義一個(gè)數(shù)組的時(shí)候必須要明確數(shù)組中的元素的個(gè)數(shù),否則編譯器會(huì)報(bào)錯(cuò)。還有要注意的是在訪問數(shù)組的時(shí)候,最大下表應(yīng)該 為數(shù)組元素個(gè)數(shù)減 1,不然會(huì)導(dǎo)致程序的異常行為。依然可以使用sizeof ()來計(jì)算某個(gè)數(shù)組所包含的元素個(gè)數(shù)。3. 字符數(shù)組與字符串:字符數(shù)組是指數(shù)組里面是存儲(chǔ)字符數(shù)據(jù),在C+中,字符串是一空字符(

16、/0')結(jié)尾的字符組,空字符是字符串結(jié)束的標(biāo)志。我們可以使用Cin 對(duì)象的 getline 來安全讀取數(shù)據(jù)。 Getline 可以讀取包括空格的整行,也可以 限制最多讀取的字符數(shù),或結(jié)束字符。可以使用 strCpy 將字符串復(fù)制到另一個(gè)字 符數(shù)組中,增加一個(gè)參數(shù)可以限制最多復(fù)制的字符數(shù),防止寫入的數(shù)據(jù)時(shí)越過數(shù) 組邊界。 使用 strCmp 來比較字符串的大小, 使用 strCat 連接字符串, 使用 strlen 來獲得字符串的長(zhǎng)度。4. 多維數(shù)組:以為數(shù)組可看作是一行數(shù)據(jù), 二維數(shù)組對(duì)應(yīng)由行列構(gòu)成的數(shù)據(jù)網(wǎng)絡(luò), 其中一維對(duì)應(yīng)于行, 另一維對(duì)應(yīng)于列。 訪問二維數(shù)組中的元素, 需要用 2

17、個(gè)下標(biāo), 下標(biāo)都是從0幵始的,C+中規(guī)定,先指定行下標(biāo),再指定列下標(biāo)。5. 創(chuàng)建和使用指針變量:學(xué)習(xí)指針之前首先要了解一下地址,地址單元的編號(hào)就是該單元的地址,它表明了內(nèi)存單元在內(nèi)存中的相對(duì)位置。變量的類型不同,占 用的內(nèi)存大小也不同。變量占用的首個(gè)內(nèi)存單元的地址就是變量的地址。在C+中可以定義特殊的變量,用來保存普通的變量地址,這就是指針變量。用“*”放在變量前面說明變量是用來存儲(chǔ)一個(gè)變量的地址,一般定義一個(gè)指針變量的時(shí)候 要對(duì)它進(jìn)行初始化,這是個(gè)良好的習(xí)慣。我們通過&, =將一個(gè)變量的地址保存到指針變量之中。 稱指針變量指向某個(gè)變量。 要特別注意的是, 在指針賦值的時(shí)候, 取地址的

18、變量類型必須要與指針類型一樣,否則編譯器報(bào)錯(cuò)。值得注意的是,在定義指針變量之后,指針變量前的表示解除引用,表示“存儲(chǔ)在處的值”6. 指針的使用:一 傳遞函數(shù)參數(shù),實(shí)現(xiàn)對(duì)實(shí)參的間接修改。二 訪問類中成員數(shù) 據(jù)和成員函數(shù)。 三 管理堆中的數(shù)據(jù)。6. 棧和堆:每個(gè)程序運(yùn)行時(shí),會(huì)創(chuàng)建 5 個(gè)內(nèi)存區(qū)域:全局名稱空間(全局變量) , 棧(保存局部變量和函數(shù)形參) ,堆(自由存儲(chǔ)區(qū),是預(yù)留給程序員的大塊內(nèi)存, 程序員可以從堆中請(qǐng)求內(nèi)存空間, 使用后釋放內(nèi)存空間) ,寄存器(用于內(nèi)部管理, CPU內(nèi)部的臨時(shí)數(shù)據(jù),指令緩存,狀態(tài)管理),代碼空間(保存程序指令)。7. 棧和堆的使用:使用new運(yùn)算符可以從堆中分配

19、內(nèi)存。堆中分配的內(nèi)存,沒有 對(duì)應(yīng)的變量,只能通過指針間接訪問。而使用 delete 運(yùn)算符,可以釋放請(qǐng)求的堆 空間。,使用完堆的內(nèi)存區(qū)域后, 必須調(diào)用 delete 釋放相應(yīng)空間, 避免內(nèi)存泄露。 在使用了 delete 指針之后,該指針將成為懸擺指針,解析或者再次 delete 該指 針將會(huì)導(dǎo)致程序崩潰。所以在 delete指針后,應(yīng)賦值指針 NULL或者重新分配內(nèi) 存空間 delete 的本質(zhì)只是釋放指針?biāo)赶虻亩芽臻g, 對(duì)指針本身并沒有什么影響。 此時(shí)指針依然指向原先的內(nèi)存位置。第七章 類的基礎(chǔ)概念1. 類和對(duì)象的定義:我們首先要知道的是抽象是對(duì)具體對(duì)象問題進(jìn)行概括,抽出 這一類對(duì)象的公

20、共性質(zhì)加以描述的過程。 將抽象出的數(shù)據(jù)成員, 代碼成員相結(jié)合, 視為一個(gè)整體,通常我們稱之為封裝。在函數(shù)中我們用括起來。繼承是C+中支 持層次分類懂得一種機(jī)制,允許程序員在保持原有類特性的基礎(chǔ)上,進(jìn)行更具體 的說明??偟膩碚f,類是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類 的全部對(duì)象提供統(tǒng)一的抽象描述。其內(nèi)部包括屬性和行為兩個(gè)主要部分。利用類 我們可以實(shí)現(xiàn)數(shù)據(jù)的封裝,隱藏,繼承與派生。類一般是用來編寫大型的復(fù)雜程 序,其模塊化程度比 C 中采用函數(shù)更高。 類中的成員分為: 數(shù)據(jù)成員和成員函數(shù)。般在 public 后面的聲明是類與外部的接口, 任何外部函數(shù)都可以訪問公有類型 數(shù)據(jù)和函數(shù)。而

21、在 private 后面的申明,只允許本類中的函數(shù)訪問,而類外部的 任何函數(shù)都不能訪問。值得注意的一點(diǎn)是,如果在類中不寫 private 和 public 的 話,那么系統(tǒng)默認(rèn)是 private 聲明。在類中定義的變量我們稱為類的對(duì)象。 內(nèi)聯(lián)函數(shù):為了提高運(yùn)行是的效率,對(duì)于較為簡(jiǎn)單的函數(shù)可以聲明為內(nèi)聯(lián)形式, 而內(nèi)聯(lián)函數(shù)不能由復(fù)雜的結(jié)構(gòu),比如循環(huán)結(jié)構(gòu)等,在類中聲明內(nèi)聯(lián)成員函數(shù)的方 式是使用 inline 關(guān)鍵字或者是直接在類中直接定義函數(shù)。2. 使用對(duì)象:定義完類后,在類中創(chuàng)建對(duì)象后,可以通過 . 操縱符來訪問它的成員 函數(shù)和成員變量,但是只能訪問 public 部分的成員函數(shù)和成員變量。 (在

22、定義一 個(gè)類時(shí)候, class 類名 ;分號(hào)一定要記得) ,在類中定義的每個(gè)成員函數(shù),都 必須要進(jìn)行定義。類中成員函數(shù)的定義與普通函數(shù)類似,但需要制動(dòng)類作用與前 綴,表示的為特定某個(gè)類的成員函數(shù)。3. 構(gòu)造函數(shù)和析構(gòu)函數(shù):構(gòu)造函數(shù)是類中的一種特殊的函數(shù),用于創(chuàng)建對(duì)象時(shí), 完成對(duì)數(shù)據(jù)成員的初始化。 構(gòu)造函數(shù)是由系統(tǒng)自動(dòng)調(diào)用的, 每當(dāng)我們創(chuàng)建對(duì)象時(shí), 系統(tǒng)就會(huì)自動(dòng)調(diào)用相應(yīng)的構(gòu)造函數(shù)。也就是說,如果沒有聲明構(gòu)造函數(shù),編譯器 自動(dòng)生成 1 個(gè)默認(rèn)構(gòu)造函數(shù),但不執(zhí)行任何操作。如果聲明了構(gòu)造函數(shù),往往也 需要聲明析構(gòu)函數(shù),析構(gòu)函數(shù)用于在對(duì)象消亡時(shí)執(zhí)行清理工作并釋放配給對(duì)象的 內(nèi)存。析構(gòu)函數(shù)為類名之前加 ,

23、沒有返回類型,不能傳遞任何參數(shù),有且僅有一 個(gè)。當(dāng)然析構(gòu)函數(shù)也由系統(tǒng)自動(dòng)調(diào)用,每當(dāng)對(duì)象消亡的時(shí)候,系統(tǒng)就會(huì)自動(dòng)調(diào)用 相應(yīng)的析構(gòu)函數(shù)。4.const 成員函數(shù)與常對(duì)象5. 內(nèi)聯(lián)函數(shù):將普通函數(shù)聲明為內(nèi)聯(lián)函數(shù),可以提高運(yùn)行效率,類的成員函數(shù)也 可以聲明為內(nèi)聯(lián)。6. 對(duì)象成員:靜態(tài)成員:同一個(gè)類不同對(duì)象的數(shù)據(jù)成員所占用的內(nèi)存空間是不同 的。在一些情況下,類的數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是相同的,如當(dāng)前已創(chuàng)建對(duì) 象的數(shù)量,這是可以將該數(shù)據(jù)成員聲明為靜態(tài)數(shù)據(jù)成員。靜態(tài)成員的初始化放在 類定義的外部。靜態(tài)成員又分為靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。 ,靜態(tài)數(shù)據(jù)成員具 有全局性,供類的所有對(duì)象共享。靜態(tài)成員函數(shù)只能訪

24、問類的靜態(tài)成員,而不能 訪問類的非靜態(tài)成員。因?yàn)楫?dāng)通過類名和運(yùn)算符: :調(diào)用一個(gè)靜態(tài)成員時(shí),不能確 定函數(shù)中所訪問的非靜態(tài)成員屬于哪個(gè)對(duì)象。7. 類地友元:友元函數(shù)實(shí)在類聲明中由關(guān)鍵字 friend 修飾說明的非成員函數(shù),在 它的函數(shù)體中能夠通過對(duì)象名訪問 private 和 protect 成員,能增加靈活性,使 程序員可以再封裝和快速性方面做合理選擇。 訪問對(duì)象中的成員必須通過對(duì)象名。 若一個(gè)類為另一個(gè)類的友元,則此類的所有成員都能訪問對(duì)方類的私有成員,一 樣用 friend 關(guān)鍵字,要注意的是友元類的關(guān)系是單向的,若B 是 A 類的友元,只能 B 訪問 A 的私有和保護(hù)數(shù)據(jù)。反之不行。8

25、. const 成員函數(shù)與常對(duì)象: 將類中某些只會(huì)讀取數(shù)據(jù)成員的函數(shù)聲明為常成員函 數(shù),只要在函數(shù)頭的結(jié)尾加上 const ,因此在常成員函數(shù)中不能修改數(shù)據(jù)成員, 否 則編譯器將報(bào)錯(cuò)。要養(yǎng)成好的編程習(xí)慣就要盡可能的將成員函數(shù)聲明為常成員函 數(shù),這樣可以防止對(duì)數(shù)據(jù)成員的意外修改。常對(duì)象:常類型的對(duì)象必須進(jìn)行初始 化,而且不能被更新。需要注意的是通過常對(duì)象只能調(diào)用它的常成員函數(shù)。常引 用:在聲明引用時(shí)用 const 修飾,被聲明的引用就是常引用,常引用所引用的對(duì) 象也是不能被更新9. 類中的指針應(yīng)用:類似在堆中創(chuàng)建一個(gè)普通類型數(shù)據(jù)空間,也可以在堆中創(chuàng)建 一個(gè)類的對(duì)象。用完之后用 delete 釋放

26、對(duì)象,將調(diào)用對(duì)象的析構(gòu)函數(shù),然后釋放 堆中的內(nèi)存。訪問堆中創(chuàng)建對(duì)象的方法,只能通過指針間接訪問,兩種訪問方式: ( *對(duì)象名) . 成員函數(shù)名;對(duì)象名 -成員函數(shù)名。指針數(shù)據(jù)成員:類中包含的指 針數(shù)據(jù)成員,每個(gè)指針指向堆中的對(duì)象。如果類中含有指針數(shù)據(jù)成員,就要編寫 析構(gòu)函數(shù)來釋放內(nèi)存,以免造成內(nèi)存泄露。第八章 繼承與多態(tài)1. 繼承的概覽: 一個(gè)新類可以從現(xiàn)有的類繼承特征,特征表示屬性和方法,而從 現(xiàn)有的類產(chǎn)生新類的過程稱為派生。一般我們稱現(xiàn)有的用來派生新類的類稱為基 類或父類,而派生出來的類稱為派生類或者子類,當(dāng)然派生類可以作為基類繼續(xù) 來派生類,從而形成類的層次結(jié)構(gòu)。 派生類的定義是 cla

27、ss 派生類名:繼承方 式 基類名 private : protected : public : 。2. 繼承方式: 繼承方式分為三種, 分別是 public :公有繼承; private :私有繼承; protected :保護(hù)繼承。通常我們?cè)谂缮?類體中添加數(shù)據(jù)成員以及成員函數(shù), 而基類的成員將自動(dòng)的稱為派生類的成員,不用再去編寫。派生類不能直接訪問 基類的私有成員。公有繼承( public ):特點(diǎn)就是基類的公有成員和保護(hù)成員作為派生類的成員 時(shí),保持原有狀態(tài),而基類的私有成員還是私有,不能被派生類訪問。私有繼承( private ):私有繼承的特點(diǎn)是基類的公有成員和保護(hù)成員都作為 派

28、生類的私有成員,并且不能被這個(gè)派生類的子類所訪問。保護(hù)繼承( protected ):其特點(diǎn)就是基類的所有公有成員和保護(hù)成員都成為派生類的保護(hù)成員,并且只能被它的派生類成員函數(shù),或者友元訪問,而基類的私有成員依然是私有的派生類中除了擁有新定義的成員外,派生類還擁有基類的所有成員(當(dāng)然除 了基類的構(gòu)造函數(shù)和賦值操作符重載函數(shù)除外) 。在定義派生類的時(shí)候一定要見到 基類的定義。派生類與友元的關(guān)系: 在派生類中沒有顯式說明,基類的友元不是派生類的 友元,如果基類是另一個(gè)類的友元,而該類沒有顯式說明,則派生類也不是該類 的友元。封裝與繼承的矛盾: 在派生類中定義新的成員的時(shí)候,往往需要用到基類的 一些

29、 private 成員,于是這時(shí)候就需要用到 protected ,protected 的成員不能被 對(duì)象使用, 但是可以在派生類中使用。 Protected 訪問控制緩解了瘋轉(zhuǎn)與繼承的矛 盾。派生類成員標(biāo)識(shí)符的作用域:派生類成員名的作用域嵌套在基類作用域中, 如果派生類中定義了與基類同名的成員, 則基類同名成員時(shí)要用基類名加標(biāo)識(shí)符。 3. 構(gòu)造與析構(gòu): 派生類的對(duì)象的數(shù)據(jù)結(jié)構(gòu)是有基類中說明的數(shù)據(jù)成員和派生類中 說明的數(shù)據(jù)成員共同構(gòu)成。將派生類的對(duì)象中由基類中說明的數(shù)據(jù)成員和操作所 構(gòu)成的封裝體稱為基類子對(duì)象,它由基類中的構(gòu)造函數(shù)進(jìn)行初始化。由于構(gòu)造函數(shù)不能夠被繼承, 因此派生類的構(gòu)造函數(shù)必須

30、通過調(diào)用基類的構(gòu)造 函數(shù)來初始化基類子對(duì)象。所以在定義派生類的構(gòu)造函數(shù)是除了對(duì)自己的數(shù)據(jù)成 員進(jìn)行初始化外,還必須負(fù)責(zé)調(diào)用基類構(gòu)造函數(shù)使基類數(shù)據(jù)成員得以初始化。如 果派生類中還有子對(duì)象是,還應(yīng)包含對(duì)子對(duì)象初始化的構(gòu)造函數(shù)。當(dāng)對(duì)象被刪除是,派生類的析構(gòu)函數(shù)被執(zhí)行。由于析構(gòu)函數(shù)也不能被繼承,因 此在執(zhí)行派生類的析構(gòu)函數(shù)是,基類的析構(gòu)函數(shù)也將被調(diào)用。在派生類中是否定 義析構(gòu)函數(shù)與基類無關(guān)。若派生類對(duì)象在退出其作用域前,有數(shù)據(jù)需要做善后工 作,就需要定義析構(gòu)函數(shù),基類的析構(gòu)函數(shù)不會(huì)因派生類沒有析構(gòu)函數(shù)而得不到 執(zhí)行,他們各自是獨(dú)立的。若基類,成員類,派生類都有析構(gòu)函數(shù),則執(zhí)行的順 序是:先自己(派生類

31、) ,再客人(成員對(duì)象) ,后祖先(基類) 。其順序與執(zhí)行構(gòu) 造函數(shù)的順序正好是相反的。派生類構(gòu)造函數(shù)在積累中有缺省的構(gòu)造函數(shù)的情況下, 或者是根本沒有定義構(gòu) 造函數(shù)時(shí)可以省略對(duì)基類構(gòu)造函數(shù)的調(diào)用。若基類構(gòu)造函數(shù)有參數(shù),則派生類必 須定義構(gòu)造函數(shù),提供將參數(shù)傳遞給基類構(gòu)造函數(shù)。4. 多重繼承: 多繼承可以看做是單繼承的擴(kuò)展。所謂多繼承是指派生類具有多個(gè) 基類,派生類與每個(gè)基類之間的關(guān)系仍可以看作是一個(gè)單繼承。多繼承的繼承方 式及訪問控制的規(guī)定同但繼承,派生類擁有所有基類的所有成員。多繼承下派生 類的構(gòu)造函數(shù)與單繼承下派生類構(gòu)造函數(shù)相似,它必須同時(shí)負(fù)責(zé)該派生類所有基 類構(gòu)造函數(shù)的調(diào)用。同時(shí),派生

32、類的參數(shù)個(gè)數(shù)必須包含完成所有基類初始化所需 要的參數(shù)個(gè)數(shù)。派生類構(gòu)造函數(shù)執(zhí)行的順序是先執(zhí)行所有的基類的構(gòu)造函數(shù),然 后在執(zhí)行派生類本身構(gòu)造函數(shù),處于同一層次的個(gè)基類構(gòu)造函數(shù)的執(zhí)行順序取決 于定義派生類是所指定的個(gè)基類順序,與派生類構(gòu)造函數(shù)中所定義的成員初始化 列表的各項(xiàng)順序其實(shí)是無關(guān)的的。 ,所以由此可見,派生類構(gòu)造函數(shù)的成員初始化 列表中各項(xiàng)順序可以任意的排列。由于是多繼承的情況下,所以可能造成對(duì)基類 中某成員的訪問出現(xiàn)了不唯一的情況,因此產(chǎn)生二義性,所以需要使用作用域運(yùn) 算符:來進(jìn)行限定。:作用域運(yùn)算符也可以用來限定一些不同基類中的同名成員 函數(shù)。重復(fù)繼承-虛基類構(gòu)造函數(shù):C+中規(guī)定,虛基

33、類子對(duì)象是由最派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進(jìn)行初始化,如果一個(gè)派生類有一個(gè)直接或者間接地虛基類,那么派生類的構(gòu)造函數(shù)的成員初始列表中必須列出對(duì)虛基類構(gòu)造函數(shù)的調(diào)用,如果沒有列出,則表示使用該虛基類的缺省構(gòu)造函數(shù)來初始化派生類 對(duì)象中的虛基類子對(duì)象。而且在一個(gè)成員初始化列表中出現(xiàn)對(duì)虛基類和非虛基類 構(gòu)造函數(shù)的調(diào)用,則虛基類的構(gòu)造函數(shù)先于非虛基類的構(gòu)造函數(shù)的執(zhí)行。5. 多態(tài)概述: 多態(tài)指不同對(duì)象接收到相同消息時(shí),產(chǎn)生不同的行為(調(diào)用不同的 方法)。其實(shí)就是使用同一個(gè)函數(shù)名,調(diào)用不同內(nèi)容的函數(shù),實(shí)現(xiàn)“一個(gè)接口,多 種方法”。我們都知道在C+中通過覆蓋,運(yùn)算符重載,虛函數(shù)等技術(shù),使得基類

34、和派生類中可以出現(xiàn)同名的成員函數(shù)。不同的成員函數(shù)被調(diào)用的時(shí)候表現(xiàn)出的不 同的行為,表現(xiàn)出很強(qiáng)的靈活性。靜態(tài)多態(tài)性: 編譯時(shí)的多態(tài)性,成員函數(shù)重載,覆蓋,運(yùn)算符重載都屬于靜態(tài) 多態(tài)性。編譯 器根據(jù)實(shí)參數(shù)據(jù)類型或?qū)ο蟮臄?shù)據(jù)類型,在編譯時(shí)就確定調(diào)用哪個(gè) 函數(shù)。動(dòng)態(tài)多態(tài)性:運(yùn)算時(shí)多態(tài)性,通過虛函數(shù)來實(shí)現(xiàn)。通過虛函數(shù)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài) 性,在代碼執(zhí)行的過程中決定調(diào)用哪個(gè)函數(shù)。重載:同一個(gè)類中,存在名稱相同但“簽名不同”的成員函數(shù),其實(shí)就是其參 數(shù)類型或者類型不同罷了,編譯的時(shí)候根據(jù)實(shí)參類型確定調(diào)用的是哪個(gè)版本的函 數(shù)。覆蓋:派生類和基類存在名稱相同的成員函數(shù), 實(shí)現(xiàn)派生類方法覆蓋基類方法的功能。若要訪問基類

35、被覆蓋的函數(shù),要使用類名前綴。賦值兼容性規(guī)則: 每一個(gè)派生類的對(duì)象,都是基類的一個(gè)對(duì)象。賦值兼容規(guī)則 是指在公有派生情況下,一個(gè)公有派生類的對(duì)象可以當(dāng)做基類的對(duì)象使用,反之是禁止的6. 虛函數(shù)與運(yùn)行時(shí)多態(tài): 實(shí)現(xiàn)一個(gè)接口,多種方法。虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)性關(guān)鍵在于 使用基類指針,當(dāng)用基類指針指向不同對(duì)象時(shí),到底調(diào)用哪個(gè)版本成員函數(shù),取 決于所指向?qū)ο蟮念愋?。虛函?shù)的實(shí)現(xiàn)的多態(tài)性是代碼執(zhí)行過程中的多態(tài),大大 增加了程序的靈活性。需要注意的是在基類中定義虛函數(shù)后,往往在派生類中重 新定義,才能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。在基類中定義的虛函數(shù),在派生類中重定義后仍 然為虛函數(shù), 即使不寫 virtual 關(guān)鍵字。虛函數(shù)

36、必須是類的共有或保護(hù)成員函數(shù); 友元函數(shù)和非成員函數(shù)不能聲明為虛函數(shù);構(gòu)造函數(shù)和靜態(tài)成員函數(shù)不能被聲明 為虛函數(shù);析構(gòu)函數(shù)可以被聲明為虛函數(shù)。虛析構(gòu)函數(shù):C+中規(guī)定了在某個(gè)類中含有虛函數(shù),則應(yīng)該將其析構(gòu)函數(shù)設(shè)置 為虛函數(shù)。否則很容易發(fā)生內(nèi)存泄露等問題。純虛函數(shù): 在基類中定義為虛函數(shù),但不提供實(shí)現(xiàn)部分,而是要求各派生類提 供該虛函數(shù)的不同版本的實(shí)現(xiàn)。抽象類(不能創(chuàng)建對(duì)象) : 凡是含有純虛函數(shù)的類稱為抽象類,抽象類往往描 述的是一般抽象概念, 如形狀類,動(dòng)物類,其中的純虛函數(shù)如 area 沒有實(shí)際意義, 不能提供實(shí)現(xiàn)代碼,要求派生類提供自己版本的實(shí)現(xiàn)代碼,C+規(guī)定了不能在內(nèi)存中創(chuàng)建抽象類對(duì)象,無論是定義抽象類對(duì)象,作為形參或返回值,還是動(dòng)態(tài)創(chuàng)建 抽象類對(duì)象都是非法的,但是可以定義一個(gè)抽象類指針(引用) ,并用該指針指向 不同的派生類對(duì)象,以實(shí)現(xiàn)多態(tài)性。抽象類作用是為派生類提供一個(gè)基本框架和 一個(gè)公共的對(duì)外接口。面向?qū)ο蟪绦蛟O(shè)計(jì)的多態(tài)性在C+中,把類看作類型,把以 public方式繼承的派生類看作是基類的子類型,這就產(chǎn)生了以下的多態(tài):派生類對(duì)象的類型既可以是派生類, 也可以是基類, 即一個(gè)對(duì)象可以屬于多種 類型?;惖闹羔樆蛞每梢灾赶蛞没悓?duì)象, 也可以指向或引

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論