




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C + + p r i m e r 第一章 快速入門學習了一個C+程序最基本的框架,和如何完成一個完整的程序編程。了解已初始化和未初始化變量的區(qū)別。初始化是一個很重要的概念,貫穿了 c+ 始終。在程序變的很復雜之前學會做好注釋,在C+中使用/表示注釋內容。初步接觸了 while 語句, for 語句, if 語句。While 語句提供了迭代執(zhí)行功能。 while ( Condition )while_body_statement ;For 語句可以簡化管理循環(huán)變量的代碼。 for (一個初始化語句,一個條件,一個 表達式 ) ;If 語句用來轉折編程。 if (Condition) else
2、;類機制是C+中最重要的特征之一,我們通過定義類來定義自己的數(shù)據(jù)結構。需要注意的是標準庫的頭文件用尖括號<>括起來,而像自定義的類這種非標準庫的頭文件用雙引號“”括起來。類可以執(zhí)行很多操作符,例如 + = << >>。第二章 變量和基本類型(1) 基本內置類型:表示整數(shù),字符,和布爾值的算術類型合稱整型。除了bool 型外的整型又分帶符號和無符號類型。類型 float , double 和 long double 都是 浮點型。單精度浮點型只能保證 6位有效數(shù)字,而雙精度可以保證 10 位有效數(shù)字。(2)字面值常量:整型字面值規(guī)則,可以是使用十進制,八進制,
3、十六進制。浮點字面值規(guī)則可以用十進制或者是科學計數(shù)法來表示浮點字面值常量。Bool 字面值和字符字面值是 true false 。字符串字面值常量用雙引號括起來的零個或者多 個字符表示。多行字面值可以再一行的末尾家一反斜杠符號可將此行和下行當做 一行處理 ( 3)變量:變量是提供了程序可以操作的有名字的存儲區(qū)。而變量名是變量的標 識符??梢杂勺帜?, 數(shù)字和下劃線組成。 變量名必須是由字母或者下劃線開頭的, 并且區(qū)分大小寫。( 4) const 限定符:定義 const 對象是把一個對象轉化成一個常量。因為常量在 定義后不能被修改,所以定義是必須初始化。(5)引用:引用就是對象的另一個名字,是一
4、種復合類型,通過在變量名前添加 “&”符號來定義。( 6) typedef 名字: typedef 可以用來定義類型的同義詞。一般使用 typedef 有 三種目的, 1. 為了隱藏特定類型的實現(xiàn),強調使用類型的目的。 2. 簡化復雜的類 型定義,使其更易理解。 3. 允許一種類型用于多個目的,同時使得每次使用該類 型的目的明確。(7)枚舉:enum枚舉類型名枚舉成員1,枚舉成員2;(8)類類型:C+中通過定義類來自定義數(shù)據(jù)類型。類定義了該類型的對象包含 的數(shù)據(jù)和該類型的對象可執(zhí)行的操作。定義了一關鍵字 class 開始,其后是該類 的名字標識符。類體位于花括號里面,花括號后,面必須要
5、跟一個分號。第三章 標準庫類型1. 命名空間的 using 聲明:使用 using 說明就可以在不需要加前綴 namespace_name:的情況下訪問命名空間中的名字。如果在頭文件中放置 using 聲明,就相當于在包含該頭文件的每個程序中都放置了同一 using 聲明,不論該 程序是否需要 using 聲明。2. 標準庫 string 類型: string 類型支持長度可變的字符串, 標準庫 string 類型 的目的就是滿足對字符串的一般應用3. 標準庫 vector 類型: vector 是同一種類型的對象的集合, 每個對象都有一個對 應的整數(shù)索引值,我們一般把 vector 稱作容器
6、。 vector 是一個類模板。使用模 板可以編寫一個類定義或函數(shù)定義,而用于多個不同的數(shù)據(jù)類型。4 標準庫 bitset 類型:標準庫提供的 bitset 類簡化了位集的處理。 類似于 vector , bitset 類是一種類模板,而與 vector 不同的是 bitset 類型對象的區(qū)別僅在其長 度而不在其類型。第四章 語句1.if 語句: if 語句根據(jù)特定表達式是否為真來有條件的執(zhí)行另一語句。If 語句有兩種形式,一種有帶 else 分支,而另一種則沒有。2.switch 語句: switch 語句提供了一種更方便的方法來實現(xiàn)深沉嵌套的if/else邏輯。在 switch 語句中,漏
7、寫 break 語句是常見的程序錯誤。但是 break 語句, 也要慎用,并不是總是恰當?shù)?。在switch語句中,default標號提供了相當于else 子句的功能。3. while 語句:當條件為真的時候, while 語句反復執(zhí)行目標語句。再循環(huán)條件中 定義的變量在每次的循環(huán)里面都要經歷創(chuàng)建和撤銷的過程。4. for 語句: for 語句的語法形式是: for (init-statement; condition ;expression ) statement 。5. do while語句:該語句保證了循環(huán)體至少執(zhí)行一次。 do statement while(condition );分號
8、一定不能忘了。6. break 語句:break 語句用在結束最近的 while,do while ,for ,switch 語句, 并將程序的執(zhí)行權傳遞給緊接在被終止語句之后的語句7.continue 語句: continue 語句導致最近的循環(huán)語句的當次迭代提前結束。 對于while 和 do while 語句,繼續(xù)求解循環(huán)條件。而對于 for 循環(huán),程序流程接著求 解 for 語句頭中的 exp 表達式。8.goto 語句:由于所有 goto 的程序都可以改寫成為不用 goto 語句,所以,也沒 有必要再使用 goto 語句了。第五章 函數(shù)1. 函數(shù)的定義:所謂的函數(shù)就是由函數(shù)名以及一組
9、操作數(shù)類型唯一的表示。函數(shù) 的操作數(shù)就是形參,在一對圓括號中聲明,形參與形參之間以逗號隔離。而所謂 的函數(shù)調用就是使用調用操作符()實現(xiàn)函數(shù)的調用。函數(shù)的調用其實就是做了 兩件事情:用對應的實參初始化函數(shù)的形參,并將控制權轉移給被調用的函數(shù)。 形參與實參的差別在于形參是在函數(shù)的形式表中定義的,并由調用函數(shù)是傳遞給 函數(shù)的實參初始化。2. 定義函數(shù)的一般形式:定義無參函數(shù)的一般形式:類型標識符 函數(shù)名() 聲 明部分 語句 定義有參函數(shù)的一般形式: 類型標識符 函數(shù)名(形式參數(shù)列表) 聲明部分 語句 。3. 函數(shù)的參數(shù)和函數(shù)的值: 其實在定義函數(shù)時指定的形參, 在未出現(xiàn)函數(shù)調用時, 它們并不占內
10、存中的存儲單元,因此才稱它們是形式參數(shù)或虛擬參數(shù),表示它們 并不是實際存在的數(shù)據(jù),只有在函數(shù)發(fā)生調用時,函數(shù)中的形參才被分配內存單 元,一遍接收從實參傳來的數(shù)據(jù)。在每一次的調用結束后,形參所占的內存單元 也會被釋放。實參可以是常量,變量或者表達式。而在定義函數(shù)時,必須在函數(shù) 首部指定形參的類型,在函數(shù)的調用過程中,實參與形參的類型應相同或賦值兼 容,實參變量對形參變量的數(shù)據(jù)傳遞是值傳遞,單向傳遞,只有實參傳給形參,return 語句獲得,函數(shù)不能由形參傳回給實參。函數(shù)的返回值就是通過函數(shù)中的 的類型決定返回值的類型。4. 函數(shù)的調用:函數(shù)的調用方式一般用三種,一、函數(shù)語句。二、函數(shù)表達式。 三
11、、函數(shù)參數(shù)。想要調用一個函數(shù)要具備以下的幾個條件:首先被調用的函數(shù)必 須是已經存在的。如果使用到庫函數(shù),記得在開頭用 #include 包含進來。如果使 用用戶自己定義的函數(shù),而該函數(shù)與調用它的函數(shù)在同一程序單位中,且位置在 主調函數(shù)之后,則必須在調用此函數(shù)之前對被調用的函數(shù)作聲明。5. 內置函數(shù):這是C+提供的一種可以提高效率的方法,在編譯時將所調用函數(shù)的代碼直接嵌入主調函數(shù)中,而不是將流程轉出去。指定內置函數(shù)的方法只需在函 數(shù)首行的左端加一個關鍵字 inline 即可。內置函數(shù)雖然能節(jié)省運算時間,但是會 增加目標程序的長度。因此只將規(guī)模小的函數(shù)聲明成內置函數(shù)。6. 函數(shù)的重載:C+允許用同
12、一個函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)和類 型不同。這就是函數(shù)的重載。是一個函數(shù)名可以多用,有不同的含義。7. 函數(shù)的模板:所謂的函數(shù)的模板,實際上就是建立一個通用函數(shù),其函數(shù)類型 和形參類型不具體指定, 用一個虛擬的類型來代表。 這個通用函數(shù)就是函數(shù)模板。 凡是函數(shù)體相同的函數(shù)都可以用這個模板來代替,不必定義多個函數(shù),只需要在 模板中定義一次即可。在調用函數(shù)系統(tǒng)會根據(jù)實參的類型來取代模板中的虛擬類 型,從而實現(xiàn)了不同函數(shù)的功能。定義函數(shù)模板的一般形式為 template type name T或template vclass T。用函數(shù)模板比函數(shù)重載更方便,程序更簡潔。但是只適用于函數(shù)的
13、參數(shù)個數(shù)相同而類型不同。8. 有默認參數(shù)的函數(shù):有時候在主函數(shù)調用別的被調函數(shù)時,使用同樣的實參, 因此可在定義函數(shù)的時候給形參一個默認值。 這樣可以簡化編程, 提高運行效率 一個函數(shù)不能既作為重載函數(shù),又作為有默認參數(shù)的函數(shù),因為很容易出現(xiàn)二義 性。9. 函數(shù)的嵌套調用:C+不允許對函數(shù)作嵌套定義,也就是說在一個函數(shù)中不能完 整地包含另一個函數(shù)。在一個程序中每一個函數(shù)的定義都是互相平行很獨立的。 雖然布恩那個嵌套定義函數(shù),但是可以嵌套調用函數(shù)。10. 函數(shù)的遞歸調用: 在調用一個函數(shù)的過程中又出現(xiàn)直接或間接地調用該函數(shù)本 身。這就是函數(shù)的遞歸調用。11. 局部變量和全局變量:所謂的局部變量就
14、是在一個函數(shù)內部定義的變量,只在 本函數(shù)范圍內有效,只能在本函數(shù)內才能使用。全局變量是在函數(shù)之外定義的變 量。全局變量的有效范圍為從定義變量的位置開始到本源文件結束。12. 變量的存儲類型:分為兩種,靜態(tài)和動態(tài)存儲。所謂的靜態(tài)存儲方式是指在程 序運行期間,系統(tǒng)對變量分配固定的存儲空間。而動態(tài)存儲方式則是在程序運行 期間,系統(tǒng)對變量動態(tài)地分配存儲空間。前面提到的全局變量就是存放在靜態(tài)存 儲區(qū)中,在程序執(zhí)行的過程中它們占據(jù)固定的存儲單元。在動態(tài)存儲區(qū)中存放的 是函數(shù)形式參數(shù),和函數(shù)中的自動變量,以及函數(shù)調用時的現(xiàn)場保護和返回地址 等??梢允褂?static 將局部變量變?yōu)殪o態(tài)局部變量。靜態(tài)局部變量
15、在靜態(tài)存儲區(qū) 內分配存儲單元。在程序整個運行期間都不釋放。第六章 數(shù)組與字符串1. 數(shù)組的定義:數(shù)組是一組相同類型的數(shù)據(jù)的集合,他們占用連續(xù)的存儲單元, 數(shù)組中的每個數(shù)據(jù)稱為一個元素。2. 一維數(shù)組定義:數(shù)組的三要素是其名稱,以及每個元素的數(shù)據(jù)類型,還有就是 必須是常量表達式的數(shù)據(jù)個數(shù)。在定義一個數(shù)組的時候必須要明確數(shù)組中的元素的個數(shù),否則編譯器會報錯。還有要注意的是在訪問數(shù)組的時候,最大下表應該 為數(shù)組元素個數(shù)減 1,不然會導致程序的異常行為。依然可以使用sizeof ()來計算某個數(shù)組所包含的元素個數(shù)。3. 字符數(shù)組與字符串:字符數(shù)組是指數(shù)組里面是存儲字符數(shù)據(jù),在C+中,字符串是一空字符(
16、/0')結尾的字符組,空字符是字符串結束的標志。我們可以使用Cin 對象的 getline 來安全讀取數(shù)據(jù)。 Getline 可以讀取包括空格的整行,也可以 限制最多讀取的字符數(shù),或結束字符??梢允褂?strCpy 將字符串復制到另一個字 符數(shù)組中,增加一個參數(shù)可以限制最多復制的字符數(shù),防止寫入的數(shù)據(jù)時越過數(shù) 組邊界。 使用 strCmp 來比較字符串的大小, 使用 strCat 連接字符串, 使用 strlen 來獲得字符串的長度。4. 多維數(shù)組:以為數(shù)組可看作是一行數(shù)據(jù), 二維數(shù)組對應由行列構成的數(shù)據(jù)網絡, 其中一維對應于行, 另一維對應于列。 訪問二維數(shù)組中的元素, 需要用 2
17、個下標, 下標都是從0幵始的,C+中規(guī)定,先指定行下標,再指定列下標。5. 創(chuàng)建和使用指針變量:學習指針之前首先要了解一下地址,地址單元的編號就是該單元的地址,它表明了內存單元在內存中的相對位置。變量的類型不同,占 用的內存大小也不同。變量占用的首個內存單元的地址就是變量的地址。在C+中可以定義特殊的變量,用來保存普通的變量地址,這就是指針變量。用“*”放在變量前面說明變量是用來存儲一個變量的地址,一般定義一個指針變量的時候 要對它進行初始化,這是個良好的習慣。我們通過&, =將一個變量的地址保存到指針變量之中。 稱指針變量指向某個變量。 要特別注意的是, 在指針賦值的時候, 取地址的
18、變量類型必須要與指針類型一樣,否則編譯器報錯。值得注意的是,在定義指針變量之后,指針變量前的表示解除引用,表示“存儲在處的值”6. 指針的使用:一 傳遞函數(shù)參數(shù),實現(xiàn)對實參的間接修改。二 訪問類中成員數(shù) 據(jù)和成員函數(shù)。 三 管理堆中的數(shù)據(jù)。6. 棧和堆:每個程序運行時,會創(chuàng)建 5 個內存區(qū)域:全局名稱空間(全局變量) , 棧(保存局部變量和函數(shù)形參) ,堆(自由存儲區(qū),是預留給程序員的大塊內存, 程序員可以從堆中請求內存空間, 使用后釋放內存空間) ,寄存器(用于內部管理, CPU內部的臨時數(shù)據(jù),指令緩存,狀態(tài)管理),代碼空間(保存程序指令)。7. 棧和堆的使用:使用new運算符可以從堆中分配
19、內存。堆中分配的內存,沒有 對應的變量,只能通過指針間接訪問。而使用 delete 運算符,可以釋放請求的堆 空間。,使用完堆的內存區(qū)域后, 必須調用 delete 釋放相應空間, 避免內存泄露。 在使用了 delete 指針之后,該指針將成為懸擺指針,解析或者再次 delete 該指 針將會導致程序崩潰。所以在 delete指針后,應賦值指針 NULL或者重新分配內 存空間 delete 的本質只是釋放指針所指向的堆空間, 對指針本身并沒有什么影響。 此時指針依然指向原先的內存位置。第七章 類的基礎概念1. 類和對象的定義:我們首先要知道的是抽象是對具體對象問題進行概括,抽出 這一類對象的公
20、共性質加以描述的過程。 將抽象出的數(shù)據(jù)成員, 代碼成員相結合, 視為一個整體,通常我們稱之為封裝。在函數(shù)中我們用括起來。繼承是C+中支 持層次分類懂得一種機制,允許程序員在保持原有類特性的基礎上,進行更具體 的說明??偟膩碚f,類是具有相同屬性和行為的一組對象的集合,它為屬于該類 的全部對象提供統(tǒng)一的抽象描述。其內部包括屬性和行為兩個主要部分。利用類 我們可以實現(xiàn)數(shù)據(jù)的封裝,隱藏,繼承與派生。類一般是用來編寫大型的復雜程 序,其模塊化程度比 C 中采用函數(shù)更高。 類中的成員分為: 數(shù)據(jù)成員和成員函數(shù)。般在 public 后面的聲明是類與外部的接口, 任何外部函數(shù)都可以訪問公有類型 數(shù)據(jù)和函數(shù)。而
21、在 private 后面的申明,只允許本類中的函數(shù)訪問,而類外部的 任何函數(shù)都不能訪問。值得注意的一點是,如果在類中不寫 private 和 public 的 話,那么系統(tǒng)默認是 private 聲明。在類中定義的變量我們稱為類的對象。 內聯(lián)函數(shù):為了提高運行是的效率,對于較為簡單的函數(shù)可以聲明為內聯(lián)形式, 而內聯(lián)函數(shù)不能由復雜的結構,比如循環(huán)結構等,在類中聲明內聯(lián)成員函數(shù)的方 式是使用 inline 關鍵字或者是直接在類中直接定義函數(shù)。2. 使用對象:定義完類后,在類中創(chuàng)建對象后,可以通過 . 操縱符來訪問它的成員 函數(shù)和成員變量,但是只能訪問 public 部分的成員函數(shù)和成員變量。 (在
22、定義一 個類時候, class 類名 ;分號一定要記得) ,在類中定義的每個成員函數(shù),都 必須要進行定義。類中成員函數(shù)的定義與普通函數(shù)類似,但需要制動類作用與前 綴,表示的為特定某個類的成員函數(shù)。3. 構造函數(shù)和析構函數(shù):構造函數(shù)是類中的一種特殊的函數(shù),用于創(chuàng)建對象時, 完成對數(shù)據(jù)成員的初始化。 構造函數(shù)是由系統(tǒng)自動調用的, 每當我們創(chuàng)建對象時, 系統(tǒng)就會自動調用相應的構造函數(shù)。也就是說,如果沒有聲明構造函數(shù),編譯器 自動生成 1 個默認構造函數(shù),但不執(zhí)行任何操作。如果聲明了構造函數(shù),往往也 需要聲明析構函數(shù),析構函數(shù)用于在對象消亡時執(zhí)行清理工作并釋放配給對象的 內存。析構函數(shù)為類名之前加 ,
23、沒有返回類型,不能傳遞任何參數(shù),有且僅有一 個。當然析構函數(shù)也由系統(tǒng)自動調用,每當對象消亡的時候,系統(tǒng)就會自動調用 相應的析構函數(shù)。4.const 成員函數(shù)與常對象5. 內聯(lián)函數(shù):將普通函數(shù)聲明為內聯(lián)函數(shù),可以提高運行效率,類的成員函數(shù)也 可以聲明為內聯(lián)。6. 對象成員:靜態(tài)成員:同一個類不同對象的數(shù)據(jù)成員所占用的內存空間是不同 的。在一些情況下,類的數(shù)據(jù)成員的值對每個對象都是相同的,如當前已創(chuàng)建對 象的數(shù)量,這是可以將該數(shù)據(jù)成員聲明為靜態(tài)數(shù)據(jù)成員。靜態(tài)成員的初始化放在 類定義的外部。靜態(tài)成員又分為靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。 ,靜態(tài)數(shù)據(jù)成員具 有全局性,供類的所有對象共享。靜態(tài)成員函數(shù)只能訪
24、問類的靜態(tài)成員,而不能 訪問類的非靜態(tài)成員。因為當通過類名和運算符: :調用一個靜態(tài)成員時,不能確 定函數(shù)中所訪問的非靜態(tài)成員屬于哪個對象。7. 類地友元:友元函數(shù)實在類聲明中由關鍵字 friend 修飾說明的非成員函數(shù),在 它的函數(shù)體中能夠通過對象名訪問 private 和 protect 成員,能增加靈活性,使 程序員可以再封裝和快速性方面做合理選擇。 訪問對象中的成員必須通過對象名。 若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員,一 樣用 friend 關鍵字,要注意的是友元類的關系是單向的,若B 是 A 類的友元,只能 B 訪問 A 的私有和保護數(shù)據(jù)。反之不行。8
25、. const 成員函數(shù)與常對象: 將類中某些只會讀取數(shù)據(jù)成員的函數(shù)聲明為常成員函 數(shù),只要在函數(shù)頭的結尾加上 const ,因此在常成員函數(shù)中不能修改數(shù)據(jù)成員, 否 則編譯器將報錯。要養(yǎng)成好的編程習慣就要盡可能的將成員函數(shù)聲明為常成員函 數(shù),這樣可以防止對數(shù)據(jù)成員的意外修改。常對象:常類型的對象必須進行初始 化,而且不能被更新。需要注意的是通過常對象只能調用它的常成員函數(shù)。常引 用:在聲明引用時用 const 修飾,被聲明的引用就是常引用,常引用所引用的對 象也是不能被更新9. 類中的指針應用:類似在堆中創(chuàng)建一個普通類型數(shù)據(jù)空間,也可以在堆中創(chuàng)建 一個類的對象。用完之后用 delete 釋放
26、對象,將調用對象的析構函數(shù),然后釋放 堆中的內存。訪問堆中創(chuàng)建對象的方法,只能通過指針間接訪問,兩種訪問方式: ( *對象名) . 成員函數(shù)名;對象名 -成員函數(shù)名。指針數(shù)據(jù)成員:類中包含的指 針數(shù)據(jù)成員,每個指針指向堆中的對象。如果類中含有指針數(shù)據(jù)成員,就要編寫 析構函數(shù)來釋放內存,以免造成內存泄露。第八章 繼承與多態(tài)1. 繼承的概覽: 一個新類可以從現(xiàn)有的類繼承特征,特征表示屬性和方法,而從 現(xiàn)有的類產生新類的過程稱為派生。一般我們稱現(xiàn)有的用來派生新類的類稱為基 類或父類,而派生出來的類稱為派生類或者子類,當然派生類可以作為基類繼續(xù) 來派生類,從而形成類的層次結構。 派生類的定義是 cla
27、ss 派生類名:繼承方 式 基類名 private : protected : public : 。2. 繼承方式: 繼承方式分為三種, 分別是 public :公有繼承; private :私有繼承; protected :保護繼承。通常我們在派生類 類體中添加數(shù)據(jù)成員以及成員函數(shù), 而基類的成員將自動的稱為派生類的成員,不用再去編寫。派生類不能直接訪問 基類的私有成員。公有繼承( public ):特點就是基類的公有成員和保護成員作為派生類的成員 時,保持原有狀態(tài),而基類的私有成員還是私有,不能被派生類訪問。私有繼承( private ):私有繼承的特點是基類的公有成員和保護成員都作為 派
28、生類的私有成員,并且不能被這個派生類的子類所訪問。保護繼承( protected ):其特點就是基類的所有公有成員和保護成員都成為派生類的保護成員,并且只能被它的派生類成員函數(shù),或者友元訪問,而基類的私有成員依然是私有的派生類中除了擁有新定義的成員外,派生類還擁有基類的所有成員(當然除 了基類的構造函數(shù)和賦值操作符重載函數(shù)除外) 。在定義派生類的時候一定要見到 基類的定義。派生類與友元的關系: 在派生類中沒有顯式說明,基類的友元不是派生類的 友元,如果基類是另一個類的友元,而該類沒有顯式說明,則派生類也不是該類 的友元。封裝與繼承的矛盾: 在派生類中定義新的成員的時候,往往需要用到基類的 一些
29、 private 成員,于是這時候就需要用到 protected ,protected 的成員不能被 對象使用, 但是可以在派生類中使用。 Protected 訪問控制緩解了瘋轉與繼承的矛 盾。派生類成員標識符的作用域:派生類成員名的作用域嵌套在基類作用域中, 如果派生類中定義了與基類同名的成員, 則基類同名成員時要用基類名加標識符。 3. 構造與析構: 派生類的對象的數(shù)據(jù)結構是有基類中說明的數(shù)據(jù)成員和派生類中 說明的數(shù)據(jù)成員共同構成。將派生類的對象中由基類中說明的數(shù)據(jù)成員和操作所 構成的封裝體稱為基類子對象,它由基類中的構造函數(shù)進行初始化。由于構造函數(shù)不能夠被繼承, 因此派生類的構造函數(shù)必須
30、通過調用基類的構造 函數(shù)來初始化基類子對象。所以在定義派生類的構造函數(shù)是除了對自己的數(shù)據(jù)成 員進行初始化外,還必須負責調用基類構造函數(shù)使基類數(shù)據(jù)成員得以初始化。如 果派生類中還有子對象是,還應包含對子對象初始化的構造函數(shù)。當對象被刪除是,派生類的析構函數(shù)被執(zhí)行。由于析構函數(shù)也不能被繼承,因 此在執(zhí)行派生類的析構函數(shù)是,基類的析構函數(shù)也將被調用。在派生類中是否定 義析構函數(shù)與基類無關。若派生類對象在退出其作用域前,有數(shù)據(jù)需要做善后工 作,就需要定義析構函數(shù),基類的析構函數(shù)不會因派生類沒有析構函數(shù)而得不到 執(zhí)行,他們各自是獨立的。若基類,成員類,派生類都有析構函數(shù),則執(zhí)行的順 序是:先自己(派生類
31、) ,再客人(成員對象) ,后祖先(基類) 。其順序與執(zhí)行構 造函數(shù)的順序正好是相反的。派生類構造函數(shù)在積累中有缺省的構造函數(shù)的情況下, 或者是根本沒有定義構 造函數(shù)時可以省略對基類構造函數(shù)的調用。若基類構造函數(shù)有參數(shù),則派生類必 須定義構造函數(shù),提供將參數(shù)傳遞給基類構造函數(shù)。4. 多重繼承: 多繼承可以看做是單繼承的擴展。所謂多繼承是指派生類具有多個 基類,派生類與每個基類之間的關系仍可以看作是一個單繼承。多繼承的繼承方 式及訪問控制的規(guī)定同但繼承,派生類擁有所有基類的所有成員。多繼承下派生 類的構造函數(shù)與單繼承下派生類構造函數(shù)相似,它必須同時負責該派生類所有基 類構造函數(shù)的調用。同時,派生
32、類的參數(shù)個數(shù)必須包含完成所有基類初始化所需 要的參數(shù)個數(shù)。派生類構造函數(shù)執(zhí)行的順序是先執(zhí)行所有的基類的構造函數(shù),然 后在執(zhí)行派生類本身構造函數(shù),處于同一層次的個基類構造函數(shù)的執(zhí)行順序取決 于定義派生類是所指定的個基類順序,與派生類構造函數(shù)中所定義的成員初始化 列表的各項順序其實是無關的的。 ,所以由此可見,派生類構造函數(shù)的成員初始化 列表中各項順序可以任意的排列。由于是多繼承的情況下,所以可能造成對基類 中某成員的訪問出現(xiàn)了不唯一的情況,因此產生二義性,所以需要使用作用域運 算符:來進行限定。:作用域運算符也可以用來限定一些不同基類中的同名成員 函數(shù)。重復繼承-虛基類構造函數(shù):C+中規(guī)定,虛基
33、類子對象是由最派生類的構造函數(shù)通過調用虛基類的構造函數(shù)進行初始化,如果一個派生類有一個直接或者間接地虛基類,那么派生類的構造函數(shù)的成員初始列表中必須列出對虛基類構造函數(shù)的調用,如果沒有列出,則表示使用該虛基類的缺省構造函數(shù)來初始化派生類 對象中的虛基類子對象。而且在一個成員初始化列表中出現(xiàn)對虛基類和非虛基類 構造函數(shù)的調用,則虛基類的構造函數(shù)先于非虛基類的構造函數(shù)的執(zhí)行。5. 多態(tài)概述: 多態(tài)指不同對象接收到相同消息時,產生不同的行為(調用不同的 方法)。其實就是使用同一個函數(shù)名,調用不同內容的函數(shù),實現(xiàn)“一個接口,多 種方法”。我們都知道在C+中通過覆蓋,運算符重載,虛函數(shù)等技術,使得基類
34、和派生類中可以出現(xiàn)同名的成員函數(shù)。不同的成員函數(shù)被調用的時候表現(xiàn)出的不 同的行為,表現(xiàn)出很強的靈活性。靜態(tài)多態(tài)性: 編譯時的多態(tài)性,成員函數(shù)重載,覆蓋,運算符重載都屬于靜態(tài) 多態(tài)性。編譯 器根據(jù)實參數(shù)據(jù)類型或對象的數(shù)據(jù)類型,在編譯時就確定調用哪個 函數(shù)。動態(tài)多態(tài)性:運算時多態(tài)性,通過虛函數(shù)來實現(xiàn)。通過虛函數(shù)實現(xiàn)的動態(tài)多態(tài) 性,在代碼執(zhí)行的過程中決定調用哪個函數(shù)。重載:同一個類中,存在名稱相同但“簽名不同”的成員函數(shù),其實就是其參 數(shù)類型或者類型不同罷了,編譯的時候根據(jù)實參類型確定調用的是哪個版本的函 數(shù)。覆蓋:派生類和基類存在名稱相同的成員函數(shù), 實現(xiàn)派生類方法覆蓋基類方法的功能。若要訪問基類
35、被覆蓋的函數(shù),要使用類名前綴。賦值兼容性規(guī)則: 每一個派生類的對象,都是基類的一個對象。賦值兼容規(guī)則 是指在公有派生情況下,一個公有派生類的對象可以當做基類的對象使用,反之是禁止的6. 虛函數(shù)與運行時多態(tài): 實現(xiàn)一個接口,多種方法。虛函數(shù)實現(xiàn)動態(tài)性關鍵在于 使用基類指針,當用基類指針指向不同對象時,到底調用哪個版本成員函數(shù),取 決于所指向對象的類型。虛函數(shù)的實現(xiàn)的多態(tài)性是代碼執(zhí)行過程中的多態(tài),大大 增加了程序的靈活性。需要注意的是在基類中定義虛函數(shù)后,往往在派生類中重 新定義,才能實現(xiàn)動態(tài)多態(tài)性。在基類中定義的虛函數(shù),在派生類中重定義后仍 然為虛函數(shù), 即使不寫 virtual 關鍵字。虛函數(shù)
36、必須是類的共有或保護成員函數(shù); 友元函數(shù)和非成員函數(shù)不能聲明為虛函數(shù);構造函數(shù)和靜態(tài)成員函數(shù)不能被聲明 為虛函數(shù);析構函數(shù)可以被聲明為虛函數(shù)。虛析構函數(shù):C+中規(guī)定了在某個類中含有虛函數(shù),則應該將其析構函數(shù)設置 為虛函數(shù)。否則很容易發(fā)生內存泄露等問題。純虛函數(shù): 在基類中定義為虛函數(shù),但不提供實現(xiàn)部分,而是要求各派生類提 供該虛函數(shù)的不同版本的實現(xiàn)。抽象類(不能創(chuàng)建對象) : 凡是含有純虛函數(shù)的類稱為抽象類,抽象類往往描 述的是一般抽象概念, 如形狀類,動物類,其中的純虛函數(shù)如 area 沒有實際意義, 不能提供實現(xiàn)代碼,要求派生類提供自己版本的實現(xiàn)代碼,C+規(guī)定了不能在內存中創(chuàng)建抽象類對象,無論是定義抽象類對象,作為形參或返回值,還是動態(tài)創(chuàng)建 抽象類對象都是非法的,但是可以定義一個抽象類指針(引用) ,并用該指針指向 不同的派生類對象,以實現(xiàn)多態(tài)性。抽象類作用是為派生類提供一個基本框架和 一個公共的對外接口。面向對象程序設計的多態(tài)性在C+中,把類看作類型,把以 public方式繼承的派生類看作是基類的子類型,這就產生了以下的多態(tài):派生類對象的類型既可以是派生類, 也可以是基類, 即一個對象可以屬于多種 類型?;惖闹羔樆蛞每梢灾赶蛞没悓ο?, 也可以指向或引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年C語言實戰(zhàn)試題及答案合集
- 解除保姆雇傭合同協(xié)議書
- 2025年計算機ACCESS自我提升計劃試題及答案
- 計算機四級考試的備考要點試題及答案
- 屋頂水箱轉讓合同協(xié)議書
- C語言函數(shù)與模塊化編程試題及答案
- 兼容性測試的基本流程試題及答案
- 推土機租賃合同協(xié)議書
- 光伏租賃合同解除協(xié)議書
- 軟件測試的全球發(fā)展動態(tài)與2025年試題及答案
- 關于我校中學生錯誤握筆姿勢調查及矯正的嘗試
- 積分制管理的實施方案及細則
- 正定古建筑-隆興寺
- 走進物理-基礎物理智慧樹知到答案2024年廣西師范大學
- 三菱電梯型號縮寫簡稱
- 2024年版-生產作業(yè)指導書SOP模板
- 歷年考研英語一真題及答案
- 寵物殯葬師理論知識考試題庫50題
- 飛花令“水”的詩句100首含“水”字的詩句大全
- 門診常見眼科病
- 保育師中級培訓課件資源
評論
0/150
提交評論