




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+ primer 第一章 快速入門學(xué)習(xí)了一個c+程序最基本的框架,和如何完成一個完整的程序編程。了解已初始化和未初始化變量的區(qū)別。初始化是一個很重要的概念,貫穿了c+始終。在程序變的很復(fù)雜之前學(xué)會做好注釋,在c+中使用/表示注釋內(nèi)容。初步接觸了while語句,for語句,if語句。While語句提供了迭代執(zhí)行功能。while(condition) while_body_statement ;For語句可以簡化管理循環(huán)變量的代碼。for (一個初始化語句,一個條件,一個表達式);If語句用來轉(zhuǎn)折編程。if (condition) else ;類機制是c+中最重要的特征之一,我們通過定義類來定義
2、自己的數(shù)據(jù)結(jié)構(gòu)。需要注意的是標準庫的頭文件用尖括號<>括起來,而像自定義的類這種非標準庫的頭文件用雙引號“”括起來。類可以執(zhí)行很多操作符,例如 + = << >> 。第二章 變量和基本類型(1)基本內(nèi)置類型:表示整數(shù),字符,和布爾值的算術(shù)類型合稱整型。除了bool型外的整型又分帶符號和無符號類型。類型float,double和long double都是浮點型。單精度浮點型只能保證6位有效數(shù)字,而雙精度可以保證10位有效數(shù)字。(2)字面值常量:整型字面值規(guī)則,可以是使用十進制,八進制,十六進制。浮點字面值規(guī)則可以用十進制或者是科學(xué)計數(shù)法來表示浮點字面值常量。B
3、ool字面值和字符字面值是true false。字符串字面值常量用雙引號括起來的零個或者多個字符表示。多行字面值可以再一行的末尾家一反斜杠符號可將此行和下行當(dāng)做一行處理。(3)變量:變量是提供了程序可以操作的有名字的存儲區(qū)。而變量名是變量的標識符??梢杂勺帜?,數(shù)字和下劃線組成。變量名必須是由字母或者下劃線開頭的,并且區(qū)分大小寫。(4)const限定符:定義const對象是把一個對象轉(zhuǎn)化成一個常量。因為常量在定義后不能被修改,所以定義是必須初始化。(5)引用:引用就是對象的另一個名字,是一種復(fù)合類型,通過在變量名前添加“&”符號來定義。(6)typedef名字:typedef可以用來定義
4、類型的同義詞。一般使用typedef有三種目的,1.為了隱藏特定類型的實現(xiàn),強調(diào)使用類型的目的。2.簡化復(fù)雜的類型定義,使其更易理解。3.允許一種類型用于多個目的,同時使得每次使用該類型的目的明確。(7)枚舉:enum 枚舉類型名枚舉成員1,枚舉成員2;(8)類類型:c+中通過定義類來自定義數(shù)據(jù)類型。類定義了該類型的對象包含的數(shù)據(jù)和該類型的對象可執(zhí)行的操作。定義了一關(guān)鍵字class開始,其后是該類的名字標識符。類體位于花括號里面,花括號后,面必須要跟一個分號。第三章 標準庫類型1.命名空間的using聲明:使用using說明就可以在不需要加前綴namespace_name:的情況下訪問命名空間
5、中的名字。如果在頭文件中放置using聲明,就相當(dāng)于在包含該頭文件的每個程序中都放置了同一using聲明,不論該程序是否需要using聲明。2.標準庫string類型: string類型支持長度可變的字符串,標準庫string類型的目的就是滿足對字符串的一般應(yīng)用。3.標準庫vector類型:vector是同一種類型的對象的集合,每個對象都有一個對應(yīng)的整數(shù)索引值,我們一般把vector稱作容器。vector是一個類模板。使用模板可以編寫一個類定義或函數(shù)定義,而用于多個不同的數(shù)據(jù)類型。 4標準庫bitset類型:標準庫提供的bitset類簡化了位集的處理。類似于vector,bitset類是一種類
6、模板,而與vector不同的是bitset類型對象的區(qū)別僅在其長度而不在其類型。第四章 語句 1.if 語句: if語句根據(jù)特定表達式是否為真來有條件的執(zhí)行另一語句。If 語句有兩種形式,一種有帶else分支,而另一種則沒有。2.switch 語句:switch語句提供了一種更方便的方法來實現(xiàn)深沉嵌套的if/else邏輯。在switch語句中,漏寫break語句是常見的程序錯誤。但是break語句,也要慎用,并不是總是恰當(dāng)?shù)?。在switch語句中,default標號提供了相當(dāng)于else子句的功能。3.while語句:當(dāng)條件為真的時候,while語句反復(fù)執(zhí)行目標語句。再循環(huán)條件中定義的變量在每次
7、的循環(huán)里面都要經(jīng)歷創(chuàng)建和撤銷的過程。 4.for語句:for語句的語法形式是:for (init-statement; condition;expression ) statement。5.do while 語句:該語句保證了循環(huán)體至少執(zhí)行一次。do statement while(condition);分號一定不能忘了。6.break 語句:break語句用在結(jié)束最近的while,do while ,for ,switch 語句,并將程序的執(zhí)行權(quán)傳遞給緊接在被終止語句之后的語句。7.continue 語句:continue語句導(dǎo)致最近的循環(huán)語句的當(dāng)次迭代提前結(jié)束。對于while和do whi
8、le語句,繼續(xù)求解循環(huán)條件。而對于for循環(huán),程序流程接著求解for語句頭中的exp表達式。 8.goto 語句:由于所有g(shù)oto的程序都可以改寫成為不用goto語句,所以,也沒有必要再使用goto語句了。第五章 函數(shù) 1.函數(shù)的定義:所謂的函數(shù)就是由函數(shù)名以及一組操作數(shù)類型唯一的表示。函數(shù)的操作數(shù)就是形參,在一對圓括號中聲明,形參與形參之間以逗號隔離。而所謂的函數(shù)調(diào)用就是使用調(diào)用操作符()實現(xiàn)函數(shù)的調(diào)用。函數(shù)的調(diào)用其實就是做了兩件事情:用對應(yīng)的實參初始化函數(shù)的形參,并將控制權(quán)轉(zhuǎn)移給被調(diào)用的函數(shù)。形參與實參的差別在于形參是在函數(shù)的形式表中定義的,并由調(diào)用函數(shù)是傳遞給函數(shù)的實參初始化。 2.定義
9、函數(shù)的一般形式:定義無參函數(shù)的一般形式:類型標識符 函數(shù)名() 聲明部分 語句 定義有參函數(shù)的一般形式:類型標識符 函數(shù)名(形式參數(shù)列表) 聲明部分 語句 。3.函數(shù)的參數(shù)和函數(shù)的值:其實在定義函數(shù)時指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元,因此才稱它們是形式參數(shù)或虛擬參數(shù),表示它們并不是實際存在的數(shù)據(jù),只有在函數(shù)發(fā)生調(diào)用時,函數(shù)中的形參才被分配內(nèi)存單元,一遍接收從實參傳來的數(shù)據(jù)。在每一次的調(diào)用結(jié)束后,形參所占的內(nèi)存單元也會被釋放。實參可以是常量,變量或者表達式。而在定義函數(shù)時,必須在函數(shù)首部指定形參的類型,在函數(shù)的調(diào)用過程中,實參與形參的類型應(yīng)相同或賦值兼容,實參變量對形參
10、變量的數(shù)據(jù)傳遞是值傳遞,單向傳遞,只有實參傳給形參,不能由形參傳回給實參。函數(shù)的返回值就是通過函數(shù)中的return語句獲得,函數(shù)的類型決定返回值的類型。4.函數(shù)的調(diào)用:函數(shù)的調(diào)用方式一般用三種,一、函數(shù)語句。二、函數(shù)表達式。三、函數(shù)參數(shù)。想要調(diào)用一個函數(shù)要具備以下的幾個條件:首先被調(diào)用的函數(shù)必須是已經(jīng)存在的。如果使用到庫函數(shù),記得在開頭用#include 包含進來。如果使用用戶自己定義的函數(shù),而該函數(shù)與調(diào)用它的函數(shù)在同一程序單位中,且位置在主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前對被調(diào)用的函數(shù)作聲明。5.內(nèi)置函數(shù):這是c+提供的一種可以提高效率的方法,在編譯時將所調(diào)用函數(shù)的代碼直接嵌入主調(diào)函數(shù)中,
11、而不是將流程轉(zhuǎn)出去。指定內(nèi)置函數(shù)的方法只需在函數(shù)首行的左端加一個關(guān)鍵字inline即可。內(nèi)置函數(shù)雖然能節(jié)省運算時間,但是會增加目標程序的長度。因此只將規(guī)模小的函數(shù)聲明成內(nèi)置函數(shù)。6.函數(shù)的重載:C+允許用同一個函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)和類型不同。這就是函數(shù)的重載。是一個函數(shù)名可以多用,有不同的含義。7.函數(shù)的模板:所謂的函數(shù)的模板,實際上就是建立一個通用函數(shù),其函數(shù)類型和形參類型不具體指定,用一個虛擬的類型來代表。這個通用函數(shù)就是函數(shù)模板。凡是函數(shù)體相同的函數(shù)都可以用這個模板來代替,不必定義多個函數(shù),只需要在模板中定義一次即可。在調(diào)用函數(shù)系統(tǒng)會根據(jù)實參的類型來取代模板中的虛擬類型
12、,從而實現(xiàn)了不同函數(shù)的功能。定義函數(shù)模板的一般形式為 template < typename T>或template <class T>。用函數(shù)模板比函數(shù)重載更方便,程序更簡潔。但是只適用于函數(shù)的參數(shù)個數(shù)相同而類型不同。8.有默認參數(shù)的函數(shù):有時候在主函數(shù)調(diào)用別的被調(diào)函數(shù)時,使用同樣的實參,因此可在定義函數(shù)的時候給形參一個默認值。這樣可以簡化編程,提高運行效率。一個函數(shù)不能既作為重載函數(shù),又作為有默認參數(shù)的函數(shù),因為很容易出現(xiàn)二義性。9.函數(shù)的嵌套調(diào)用:C+不允許對函數(shù)作嵌套定義,也就是說在一個函數(shù)中不能完整地包含另一個函數(shù)。在一個程序中每一個函數(shù)的定義都是互相平行很獨
13、立的。雖然布恩那個嵌套定義函數(shù),但是可以嵌套調(diào)用函數(shù)。10.函數(shù)的遞歸調(diào)用:在調(diào)用一個函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。這就是函數(shù)的遞歸調(diào)用。11.局部變量和全局變量:所謂的局部變量就是在一個函數(shù)內(nèi)部定義的變量,只在本函數(shù)范圍內(nèi)有效,只能在本函數(shù)內(nèi)才能使用。全局變量是在函數(shù)之外定義的變量。全局變量的有效范圍為從定義變量的位置開始到本源文件結(jié)束。12.變量的存儲類型:分為兩種,靜態(tài)和動態(tài)存儲。所謂的靜態(tài)存儲方式是指在程序運行期間,系統(tǒng)對變量分配固定的存儲空間。而動態(tài)存儲方式則是在程序運行期間,系統(tǒng)對變量動態(tài)地分配存儲空間。前面提到的全局變量就是存放在靜態(tài)存儲區(qū)中,在程序執(zhí)行的過程中它
14、們占據(jù)固定的存儲單元。在動態(tài)存儲區(qū)中存放的是函數(shù)形式參數(shù),和函數(shù)中的自動變量,以及函數(shù)調(diào)用時的現(xiàn)場保護和返回地址等。可以使用static將局部變量變?yōu)殪o態(tài)局部變量。靜態(tài)局部變量在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個運行期間都不釋放。第六章 數(shù)組與字符串1.數(shù)組的定義:數(shù)組是一組相同類型的數(shù)據(jù)的集合,他們占用連續(xù)的存儲單元,數(shù)組中的每個數(shù)據(jù)稱為一個元素。2.一維數(shù)組定義:數(shù)組的三要素是其名稱,以及每個元素的數(shù)據(jù)類型,還有就是必須是常量表達式的數(shù)據(jù)個數(shù)。在定義一個數(shù)組的時候必須要明確數(shù)組中的元素的個數(shù),否則編譯器會報錯。還有要注意的是在訪問數(shù)組的時候,最大下表應(yīng)該為數(shù)組元素個數(shù)減1,不然會導(dǎo)致程序
15、的異常行為。依然可以使用sizeof()來計算某個數(shù)組所包含的元素個數(shù)。3.字符數(shù)組與字符串:字符數(shù)組是指數(shù)組里面是存儲字符數(shù)據(jù),在c+中,字符串是一空字符(/0)結(jié)尾的字符組,空字符是字符串結(jié)束的標志。我們可以使用cin對象的getline來安全讀取數(shù)據(jù)。Getline可以讀取包括空格的整行,也可以限制最多讀取的字符數(shù),或結(jié)束字符??梢允褂胹trcpy將字符串復(fù)制到另一個字符數(shù)組中,增加一個參數(shù)可以限制最多復(fù)制的字符數(shù),防止寫入的數(shù)據(jù)時越過數(shù)組邊界。使用strcmp來比較字符串的大小,使用strcat連接字符串,使用strlen來獲得字符串的長度。4.多維數(shù)組:以為數(shù)組可看作是一行數(shù)據(jù),二維
16、數(shù)組對應(yīng)由行列構(gòu)成的數(shù)據(jù)網(wǎng)絡(luò),其中一維對應(yīng)于行,另一維對應(yīng)于列。訪問二維數(shù)組中的元素,需要用2個下標,下標都是從0開始的,c+中規(guī)定,先指定行下標,再指定列下標。5.創(chuàng)建和使用指針變量:學(xué)習(xí)指針之前首先要了解一下地址,地址單元的編號就是該單元的地址,它表明了內(nèi)存單元在內(nèi)存中的相對位置。變量的類型不同,占用的內(nèi)存大小也不同。變量占用的首個內(nèi)存單元的地址就是變量的地址。在C+中可以定義特殊的變量,用來保存普通的變量地址,這就是指針變量。用“*”放在變量前面說明變量是用來存儲一個變量的地址,一般定義一個指針變量的時候要對它進行初始化,這是個良好的習(xí)慣。我們通過&,=將一個變量的地址保存到指針
17、變量之中。稱指針變量指向某個變量。要特別注意的是,在指針賦值的時候,取地址的變量類型必須要與指針類型一樣,否則編譯器報錯。值得注意的是,在定義指針變量之后,指針變量前的 * 表示解除引用,表示“存儲在處的值”。6.指針的使用:一 傳遞函數(shù)參數(shù),實現(xiàn)對實參的間接修改。二 訪問類中成員數(shù)據(jù)和成員函數(shù)。 三 管理堆中的數(shù)據(jù)。6.棧和堆:每個程序運行時,會創(chuàng)建5個內(nèi)存區(qū)域:全局名稱空間(全局變量),棧(保存局部變量和函數(shù)形參),堆(自由存儲區(qū),是預(yù)留給程序員的大塊內(nèi)存,程序員可以從堆中請求內(nèi)存空間,使用后釋放內(nèi)存空間),寄存器(用于內(nèi)部管理,CPU內(nèi)部的臨時數(shù)據(jù),指令緩存,狀態(tài)管理),代碼空間(保存程
18、序指令)。7. 棧和堆的使用:使用new運算符可以從堆中分配內(nèi)存。堆中分配的內(nèi)存,沒有對應(yīng)的變量,只能通過指針間接訪問。而使用delete運算符,可以釋放請求的堆空間。,使用完堆的內(nèi)存區(qū)域后,必須調(diào)用delete釋放相應(yīng)空間,避免內(nèi)存泄露。在使用了delete 指針之后,該指針將成為懸擺指針,解析或者再次delete該指針將會導(dǎo)致程序崩潰。所以在delete指針后,應(yīng)賦值指針NULL或者重新分配內(nèi)存空間delete的本質(zhì)只是釋放指針所指向的堆空間,對指針本身并沒有什么影響。此時指針依然指向原先的內(nèi)存位置。第七章 類的基礎(chǔ)概念1.類和對象的定義:我們首先要知道的是抽象是對具體對象問題進行概括,抽
19、出這一類對象的公共性質(zhì)加以描述的過程。將抽象出的數(shù)據(jù)成員,代碼成員相結(jié)合,視為一個整體,通常我們稱之為封裝。在函數(shù)中我們用括起來。繼承是c+中支持層次分類懂得一種機制,允許程序員在保持原有類特性的基礎(chǔ)上,進行更具體的說明??偟膩碚f,類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供統(tǒng)一的抽象描述。其內(nèi)部包括屬性和行為兩個主要部分。利用類我們可以實現(xiàn)數(shù)據(jù)的封裝,隱藏,繼承與派生。類一般是用來編寫大型的復(fù)雜程序,其模塊化程度比c中采用函數(shù)更高。類中的成員分為:數(shù)據(jù)成員和成員函數(shù)。一般在public后面的聲明是類與外部的接口,任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。而在privat
20、e后面的申明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。值得注意的一點是,如果在類中不寫private和public的話,那么系統(tǒng)默認是private聲明。在類中定義的變量我們稱為類的對象。內(nèi)聯(lián)函數(shù):為了提高運行是的效率,對于較為簡單的函數(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.使用對象:定義完類后,在類中創(chuàng)建對象后,可以通過.操縱符來訪問它的成員函數(shù)和成員變量,但是只能訪問public部分的成員函數(shù)和成員變量。(在定義一個類時候,class 類名 ;分號一定要記得),在類
21、中定義的每個成員函數(shù),都必須要進行定義。類中成員函數(shù)的定義與普通函數(shù)類似,但需要制動類作用與前綴,表示的為特定某個類的成員函數(shù)。3.構(gòu)造函數(shù)和析構(gòu)函數(shù):構(gòu)造函數(shù)是類中的一種特殊的函數(shù),用于創(chuàng)建對象時,完成對數(shù)據(jù)成員的初始化。構(gòu)造函數(shù)是由系統(tǒng)自動調(diào)用的,每當(dāng)我們創(chuàng)建對象時,系統(tǒng)就會自動調(diào)用相應(yīng)的構(gòu)造函數(shù)。也就是說,如果沒有聲明構(gòu)造函數(shù),編譯器自動生成1個默認構(gòu)造函數(shù),但不執(zhí)行任何操作。如果聲明了構(gòu)造函數(shù),往往也需要聲明析構(gòu)函數(shù),析構(gòu)函數(shù)用于在對象消亡時執(zhí)行清理工作并釋放配給對象的內(nèi)存。析構(gòu)函數(shù)為類名之前加,沒有返回類型,不能傳遞任何參數(shù),有且僅有一個。當(dāng)然析構(gòu)函數(shù)也由系統(tǒng)自動調(diào)用,每當(dāng)對象消亡的
22、時候,系統(tǒng)就會自動調(diào)用相應(yīng)的析構(gòu)函數(shù)。4.const成員函數(shù)與常對象5.內(nèi)聯(lián)函數(shù):將普通函數(shù)聲明為內(nèi)聯(lián)函數(shù),可以提高運行效率,類的成員函數(shù)也可以聲明為內(nèi)聯(lián)。6.對象成員:靜態(tài)成員:同一個類不同對象的數(shù)據(jù)成員所占用的內(nèi)存空間是不同的。在一些情況下,類的數(shù)據(jù)成員的值對每個對象都是相同的,如當(dāng)前已創(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ù)只能訪問類的靜態(tài)成員,而不能訪問類的非靜態(tài)成員。因為當(dāng)通過類名和運算符:調(diào)用一個靜態(tài)成員時,不能確定函數(shù)中所訪問的非靜
23、態(tài)成員屬于哪個對象。7.類地友元:友元函數(shù)實在類聲明中由關(guān)鍵字friend修飾說明的非成員函數(shù),在它的函數(shù)體中能夠通過對象名訪問private和protect成員,能增加靈活性,使程序員可以再封裝和快速性方面做合理選擇。訪問對象中的成員必須通過對象名。若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員,一樣用friend關(guān)鍵字,要注意的是友元類的關(guān)系是單向的,若B是A類的友元,只能B訪問A的私有和保護數(shù)據(jù)。反之不行。8.const成員函數(shù)與常對象:將類中某些只會讀取數(shù)據(jù)成員的函數(shù)聲明為常成員函數(shù),只要在函數(shù)頭的結(jié)尾加上const,因此在常成員函數(shù)中不能修改數(shù)據(jù)成員,否則編譯器將
24、報錯。要養(yǎng)成好的編程習(xí)慣就要盡可能的將成員函數(shù)聲明為常成員函數(shù),這樣可以防止對數(shù)據(jù)成員的意外修改。常對象:常類型的對象必須進行初始化,而且不能被更新。需要注意的是通過常對象只能調(diào)用它的常成員函數(shù)。常引用:在聲明引用時用const修飾,被聲明的引用就是常引用,常引用所引用的對象也是不能被更新。9.類中的指針應(yīng)用:類似在堆中創(chuàng)建一個普通類型數(shù)據(jù)空間,也可以在堆中創(chuàng)建一個類的對象。用完之后用delete釋放對象,將調(diào)用對象的析構(gòu)函數(shù),然后釋放堆中的內(nèi)存。訪問堆中創(chuàng)建對象的方法,只能通過指針間接訪問,兩種訪問方式:(*對象名).成員函數(shù)名;對象名->成員函數(shù)名。指針數(shù)據(jù)成員:類中包含的指針數(shù)據(jù)成
25、員,每個指針指向堆中的對象。如果類中含有指針數(shù)據(jù)成員,就要編寫析構(gòu)函數(shù)來釋放內(nèi)存,以免造成內(nèi)存泄露。第八章 繼承與多態(tài)1.繼承的概覽:一個新類可以從現(xiàn)有的類繼承特征,特征表示屬性和方法,而從現(xiàn)有的類產(chǎn)生新類的過程稱為派生。一般我們稱現(xiàn)有的用來派生新類的類稱為基類或父類,而派生出來的類稱為派生類或者子類,當(dāng)然派生類可以作為基類繼續(xù)來派生類,從而形成類的層次結(jié)構(gòu)。 派生類的定義是 class 派生類名:繼承方式 基類名 private: protected: public:。2.繼承方式:繼承方式分為三種,分別是public:公有繼承;private:私有繼承;protected:保護繼承。通常我
26、們在派生類 類體中添加數(shù)據(jù)成員以及成員函數(shù),而基類的成員將自動的稱為派生類的成員,不用再去編寫。派生類不能直接訪問基類的私有成員。公有繼承(public):特點就是基類的公有成員和保護成員作為派生類的成員時,保持原有狀態(tài),而基類的私有成員還是私有,不能被派生類訪問。私有繼承(private):私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,并且不能被這個派生類的子類所訪問。保護繼承(protected):其特點就是基類的所有公有成員和保護成員都成為派生類的保護成員,并且只能被它的派生類成員函數(shù),或者友元訪問,而基類的私有成員依然是私有的。 派生類中除了擁有新定義的成員外,派生類
27、還擁有基類的所有成員(當(dāng)然除了基類的構(gòu)造函數(shù)和賦值操作符重載函數(shù)除外)。在定義派生類的時候一定要見到基類的定義。 派生類與友元的關(guān)系:在派生類中沒有顯式說明,基類的友元不是派生類的友元,如果基類是另一個類的友元,而該類沒有顯式說明,則派生類也不是該類的友元。封裝與繼承的矛盾:在派生類中定義新的成員的時候,往往需要用到基類的一些private成員,于是這時候就需要用到protected,protected的成員不能被對象使用,但是可以在派生類中使用。Protected訪問控制緩解了瘋轉(zhuǎn)與繼承的矛盾。派生類成員標識符的作用域:派生類成員名的作用域嵌套在基類作用域中,如果派生類中定義了與基類同名的成
28、員,則基類同名成員時要用基類名加標識符。3.構(gòu)造與析構(gòu):派生類的對象的數(shù)據(jù)結(jié)構(gòu)是有基類中說明的數(shù)據(jù)成員和派生類中說明的數(shù)據(jù)成員共同構(gòu)成。將派生類的對象中由基類中說明的數(shù)據(jù)成員和操作所構(gòu)成的封裝體稱為基類子對象,它由基類中的構(gòu)造函數(shù)進行初始化。由于構(gòu)造函數(shù)不能夠被繼承,因此派生類的構(gòu)造函數(shù)必須通過調(diào)用基類的構(gòu)造函數(shù)來初始化基類子對象。所以在定義派生類的構(gòu)造函數(shù)是除了對自己的數(shù)據(jù)成員進行初始化外,還必須負責(zé)調(diào)用基類構(gòu)造函數(shù)使基類數(shù)據(jù)成員得以初始化。如果派生類中還有子對象是,還應(yīng)包含對子對象初始化的構(gòu)造函數(shù)。當(dāng)對象被刪除是,派生類的析構(gòu)函數(shù)被執(zhí)行。由于析構(gòu)函數(shù)也不能被繼承,因此在執(zhí)行派生類的析構(gòu)函數(shù)
29、是,基類的析構(gòu)函數(shù)也將被調(diào)用。在派生類中是否定義析構(gòu)函數(shù)與基類無關(guān)。若派生類對象在退出其作用域前,有數(shù)據(jù)需要做善后工作,就需要定義析構(gòu)函數(shù),基類的析構(gòu)函數(shù)不會因派生類沒有析構(gòu)函數(shù)而得不到執(zhí)行,他們各自是獨立的。若基類,成員類,派生類都有析構(gòu)函數(shù),則執(zhí)行的順序是:先自己(派生類),再客人(成員對象),后祖先(基類)。其順序與執(zhí)行構(gòu)造函數(shù)的順序正好是相反的。派生類構(gòu)造函數(shù)在積累中有缺省的構(gòu)造函數(shù)的情況下,或者是根本沒有定義構(gòu)造函數(shù)時可以省略對基類構(gòu)造函數(shù)的調(diào)用。若基類構(gòu)造函數(shù)有參數(shù),則派生類必須定義構(gòu)造函數(shù),提供將參數(shù)傳遞給基類構(gòu)造函數(shù)。4.多重繼承:多繼承可以看做是單繼承的擴展。所謂多繼承是指派
30、生類具有多個基類,派生類與每個基類之間的關(guān)系仍可以看作是一個單繼承。多繼承的繼承方式及訪問控制的規(guī)定同但繼承,派生類擁有所有基類的所有成員。多繼承下派生類的構(gòu)造函數(shù)與單繼承下派生類構(gòu)造函數(shù)相似,它必須同時負責(zé)該派生類所有基類構(gòu)造函數(shù)的調(diào)用。同時,派生類的參數(shù)個數(shù)必須包含完成所有基類初始化所需要的參數(shù)個數(shù)。派生類構(gòu)造函數(shù)執(zhí)行的順序是先執(zhí)行所有的基類的構(gòu)造函數(shù),然后在執(zhí)行派生類本身構(gòu)造函數(shù),處于同一層次的個基類構(gòu)造函數(shù)的執(zhí)行順序取決于定義派生類是所指定的個基類順序,與派生類構(gòu)造函數(shù)中所定義的成員初始化列表的各項順序其實是無關(guān)的的。,所以由此可見,派生類構(gòu)造函數(shù)的成員初始化列表中各項順序可以任意的排
31、列。由于是多繼承的情況下,所以可能造成對基類中某成員的訪問出現(xiàn)了不唯一的情況,因此產(chǎn)生二義性,所以需要使用作用域運算符:來進行限定。:作用域運算符也可以用來限定一些不同基類中的同名成員函數(shù)。重復(fù)繼承-虛基類構(gòu)造函數(shù):C+中規(guī)定,虛基類子對象是由最派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進行初始化,如果一個派生類有一個直接或者間接地虛基類,那么派生類的構(gòu)造函數(shù)的成員初始列表中必須列出對虛基類構(gòu)造函數(shù)的調(diào)用,如果沒有列出,則表示使用該虛基類的缺省構(gòu)造函數(shù)來初始化派生類對象中的虛基類子對象。而且在一個成員初始化列表中出現(xiàn)對虛基類和非虛基類構(gòu)造函數(shù)的調(diào)用,則虛基類的構(gòu)造函數(shù)先于非虛基類的構(gòu)造函數(shù)的執(zhí)行
32、。5.多態(tài)概述:多態(tài)指不同對象接收到相同消息時,產(chǎn)生不同的行為(調(diào)用不同的方法)。其實就是使用同一個函數(shù)名,調(diào)用不同內(nèi)容的函數(shù),實現(xiàn)“一個接口,多種方法”。我們都知道在C+中通過覆蓋,運算符重載,虛函數(shù)等技術(shù),使得基類和派生類中可以出現(xiàn)同名的成員函數(shù)。不同的成員函數(shù)被調(diào)用的時候表現(xiàn)出的不同的行為,表現(xiàn)出很強的靈活性。靜態(tài)多態(tài)性:編譯時的多態(tài)性,成員函數(shù)重載,覆蓋,運算符重載都屬于靜態(tài)多態(tài)性。編譯 器根據(jù)實參數(shù)據(jù)類型或?qū)ο蟮臄?shù)據(jù)類型,在編譯時就確定調(diào)用哪個函數(shù)。動態(tài)多態(tài)性:運算時多態(tài)性,通過虛函數(shù)來實現(xiàn)。通過虛函數(shù)實現(xiàn)的動態(tài)多態(tài)性,在代碼執(zhí)行的過程中決定調(diào)用哪個函數(shù)。重載:同一個類中,存在名稱相
33、同但“簽名不同”的成員函數(shù),其實就是其參數(shù)類型或者類型不同罷了,編譯的時候根據(jù)實參類型確定調(diào)用的是哪個版本的函數(shù)。覆蓋:派生類和基類存在名稱相同的成員函數(shù),實現(xiàn)派生類方法覆蓋基類方法的功能。若要訪問基類被覆蓋的函數(shù),要使用類名前綴。賦值兼容性規(guī)則:每一個派生類的對象,都是基類的一個對象。賦值兼容規(guī)則是指在公有派生情況下,一個公有派生類的對象可以當(dāng)做基類的對象使用,反之是禁止的。6.虛函數(shù)與運行時多態(tài):實現(xiàn)一個接口,多種方法。虛函數(shù)實現(xiàn)動態(tài)性關(guān)鍵在于使用基類指針,當(dāng)用基類指針指向不同對象時,到底調(diào)用哪個版本成員函數(shù),取決于所指向?qū)ο蟮念愋?。虛函?shù)的實現(xiàn)的多態(tài)性是代碼執(zhí)行過程中的多態(tài),大大增加了程
34、序的靈活性。需要注意的是在基類中定義虛函數(shù)后,往往在派生類中重新定義,才能實現(xiàn)動態(tài)多態(tài)性。在基類中定義的虛函數(shù),在派生類中重定義后仍然為虛函數(shù),即使不寫virtual關(guān)鍵字。虛函數(shù)必須是類的共有或保護成員函數(shù);友元函數(shù)和非成員函數(shù)不能聲明為虛函數(shù);構(gòu)造函數(shù)和靜態(tài)成員函數(shù)不能被聲明為虛函數(shù);析構(gòu)函數(shù)可以被聲明為虛函數(shù)。虛析構(gòu)函數(shù):C+中規(guī)定了在某個類中含有虛函數(shù),則應(yīng)該將其析構(gòu)函數(shù)設(shè)置為虛函數(shù)。否則很容易發(fā)生內(nèi)存泄露等問題。純虛函數(shù):在基類中定義為虛函數(shù),但不提供實現(xiàn)部分,而是要求各派生類提供該虛函數(shù)的不同版本的實現(xiàn)。抽象類(不能創(chuàng)建對象):凡是含有純虛函數(shù)的類稱為抽象類,抽象類往往描述的是一般
35、抽象概念,如形狀類,動物類,其中的純虛函數(shù)如area沒有實際意義,不能提供實現(xiàn)代碼,要求派生類提供自己版本的實現(xiàn)代碼,C+規(guī)定了不能在內(nèi)存中創(chuàng)建抽象類對象,無論是定義抽象類對象,作為形參或返回值,還是動態(tài)創(chuàng)建抽象類對象都是非法的,但是可以定義一個抽象類指針(引用),并用該指針指向不同的派生類對象,以實現(xiàn)多態(tài)性。抽象類作用是為派生類提供一個基本框架和一個公共的對外接口。面向?qū)ο蟪绦蛟O(shè)計的多態(tài)性在c+中,把類看作類型,把以public方式繼承的派生類看作是基類的子類型,這就產(chǎn)生了以下的多態(tài):派生類對象的類型既可以是派生類,也可以是基類,即一個對象可以屬于多種類型?;惖闹羔樆蛞每梢灾赶蛞没悓ο螅部梢灾赶蚧蛞门缮?/p>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣元市青川縣考調(diào)事業(yè)單位人員真題2024
- 文獻挖掘與知識圖譜-全面剖析
- 智能視頻監(jiān)控算法-全面剖析
- 2025年導(dǎo)游資格證考試筆試模擬試卷:全國旅游景點導(dǎo)游詞編寫技巧試題
- 物聯(lián)網(wǎng)數(shù)據(jù)隱私保護-第7篇-全面剖析
- 當(dāng)代藝術(shù)市場趨勢-第1篇-全面剖析
- 旅游產(chǎn)業(yè)融合趨勢-全面剖析
- 2025年鋼琴演奏級考試模擬試卷:鋼琴演奏藝術(shù)修養(yǎng)與審美能力試題
- 2025-2030全球及中國海灣合作委員會國家預(yù)灌漿行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國汽車底盤測功機行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 氟化碳作為二次電池正極材料的研究
- 2024年黑龍江齊翔建設(shè)投資集團有限公司招聘筆試沖刺題(帶答案解析)
- 2024年佛山市高三二模普通高中教學(xué)質(zhì)量檢測二 數(shù)學(xué)試卷(含答案)
- 福建省國土空間規(guī)劃(2021-2035年)公眾版
- 青春期性教育完整版課件
- 2024年廣東省廣州市番禺區(qū)九年級中考一模數(shù)學(xué)試卷
- 摩托艇經(jīng)營合作協(xié)議書模板
- MOOC 計量經(jīng)濟學(xué)-西南財經(jīng)大學(xué) 中國大學(xué)慕課答案
- 2023年北京八十中初二(下)期中數(shù)學(xué)試卷(教師版)
- 麻醉護理的現(xiàn)狀與展望
- 畢業(yè)設(shè)計論文《10t單梁橋式起重機的設(shè)計》
評論
0/150
提交評論