C++primer(初學者可看筆記)_第1頁
C++primer(初學者可看筆記)_第2頁
C++primer(初學者可看筆記)_第3頁
C++primer(初學者可看筆記)_第4頁
C++primer(初學者可看筆記)_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+ primer 第一章 快速入門學習了一個c+程序最基本的框架,和如何完成一個完整的程序編程。了解已初始化和未初始化變量的區別。初始化是一個很重要的概念,貫穿了c+始終。在程序變的很復雜之前學會做好注釋,在c+中使用/表示注釋內容。初步接觸了while語句,for語句,if語句。While語句提供了迭代執行功能。while(condition) while_body_statement ;For語句可以簡化管理循環變量的代碼。for (一個初始化語句,一個條件,一個表達式);If語句用來轉折編程。if (condition) else ;類機制是c+中最重要的特征之一,我們通過定義類來定義

2、自己的數據結構。需要注意的是標準庫的頭文件用尖括號<>括起來,而像自定義的類這種非標準庫的頭文件用雙引號“”括起來。類可以執行很多操作符,例如 + = << >> 。第二章 變量和基本類型(1)基本內置類型:表示整數,字符,和布爾值的算術類型合稱整型。除了bool型外的整型又分帶符號和無符號類型。類型float,double和long double都是浮點型。單精度浮點型只能保證6位有效數字,而雙精度可以保證10位有效數字。(2)字面值常量:整型字面值規則,可以是使用十進制,八進制,十六進制。浮點字面值規則可以用十進制或者是科學計數法來表示浮點字面值常量。B

3、ool字面值和字符字面值是true false。字符串字面值常量用雙引號括起來的零個或者多個字符表示。多行字面值可以再一行的末尾家一反斜杠符號可將此行和下行當做一行處理。(3)變量:變量是提供了程序可以操作的有名字的存儲區。而變量名是變量的標識符。可以由字母,數字和下劃線組成。變量名必須是由字母或者下劃線開頭的,并且區分大小寫。(4)const限定符:定義const對象是把一個對象轉化成一個常量。因為常量在定義后不能被修改,所以定義是必須初始化。(5)引用:引用就是對象的另一個名字,是一種復合類型,通過在變量名前添加“&”符號來定義。(6)typedef名字:typedef可以用來定義

4、類型的同義詞。一般使用typedef有三種目的,1.為了隱藏特定類型的實現,強調使用類型的目的。2.簡化復雜的類型定義,使其更易理解。3.允許一種類型用于多個目的,同時使得每次使用該類型的目的明確。(7)枚舉:enum 枚舉類型名枚舉成員1,枚舉成員2;(8)類類型:c+中通過定義類來自定義數據類型。類定義了該類型的對象包含的數據和該類型的對象可執行的操作。定義了一關鍵字class開始,其后是該類的名字標識符。類體位于花括號里面,花括號后,面必須要跟一個分號。第三章 標準庫類型1.命名空間的using聲明:使用using說明就可以在不需要加前綴namespace_name:的情況下訪問命名空間

5、中的名字。如果在頭文件中放置using聲明,就相當于在包含該頭文件的每個程序中都放置了同一using聲明,不論該程序是否需要using聲明。2.標準庫string類型: string類型支持長度可變的字符串,標準庫string類型的目的就是滿足對字符串的一般應用。3.標準庫vector類型:vector是同一種類型的對象的集合,每個對象都有一個對應的整數索引值,我們一般把vector稱作容器。vector是一個類模板。使用模板可以編寫一個類定義或函數定義,而用于多個不同的數據類型。 4標準庫bitset類型:標準庫提供的bitset類簡化了位集的處理。類似于vector,bitset類是一種類

6、模板,而與vector不同的是bitset類型對象的區別僅在其長度而不在其類型。第四章 語句 1.if 語句: if語句根據特定表達式是否為真來有條件的執行另一語句。If 語句有兩種形式,一種有帶else分支,而另一種則沒有。2.switch 語句:switch語句提供了一種更方便的方法來實現深沉嵌套的if/else邏輯。在switch語句中,漏寫break語句是常見的程序錯誤。但是break語句,也要慎用,并不是總是恰當的。在switch語句中,default標號提供了相當于else子句的功能。3.while語句:當條件為真的時候,while語句反復執行目標語句。再循環條件中定義的變量在每次

7、的循環里面都要經歷創建和撤銷的過程。 4.for語句:for語句的語法形式是:for (init-statement; condition;expression ) statement。5.do while 語句:該語句保證了循環體至少執行一次。do statement while(condition);分號一定不能忘了。6.break 語句:break語句用在結束最近的while,do while ,for ,switch 語句,并將程序的執行權傳遞給緊接在被終止語句之后的語句。7.continue 語句:continue語句導致最近的循環語句的當次迭代提前結束。對于while和do whi

8、le語句,繼續求解循環條件。而對于for循環,程序流程接著求解for語句頭中的exp表達式。 8.goto 語句:由于所有goto的程序都可以改寫成為不用goto語句,所以,也沒有必要再使用goto語句了。第五章 函數 1.函數的定義:所謂的函數就是由函數名以及一組操作數類型唯一的表示。函數的操作數就是形參,在一對圓括號中聲明,形參與形參之間以逗號隔離。而所謂的函數調用就是使用調用操作符()實現函數的調用。函數的調用其實就是做了兩件事情:用對應的實參初始化函數的形參,并將控制權轉移給被調用的函數。形參與實參的差別在于形參是在函數的形式表中定義的,并由調用函數是傳遞給函數的實參初始化。 2.定義

9、函數的一般形式:定義無參函數的一般形式:類型標識符 函數名() 聲明部分 語句 定義有參函數的一般形式:類型標識符 函數名(形式參數列表) 聲明部分 語句 。3.函數的參數和函數的值:其實在定義函數時指定的形參,在未出現函數調用時,它們并不占內存中的存儲單元,因此才稱它們是形式參數或虛擬參數,表示它們并不是實際存在的數據,只有在函數發生調用時,函數中的形參才被分配內存單元,一遍接收從實參傳來的數據。在每一次的調用結束后,形參所占的內存單元也會被釋放。實參可以是常量,變量或者表達式。而在定義函數時,必須在函數首部指定形參的類型,在函數的調用過程中,實參與形參的類型應相同或賦值兼容,實參變量對形參

10、變量的數據傳遞是值傳遞,單向傳遞,只有實參傳給形參,不能由形參傳回給實參。函數的返回值就是通過函數中的return語句獲得,函數的類型決定返回值的類型。4.函數的調用:函數的調用方式一般用三種,一、函數語句。二、函數表達式。三、函數參數。想要調用一個函數要具備以下的幾個條件:首先被調用的函數必須是已經存在的。如果使用到庫函數,記得在開頭用#include 包含進來。如果使用用戶自己定義的函數,而該函數與調用它的函數在同一程序單位中,且位置在主調函數之后,則必須在調用此函數之前對被調用的函數作聲明。5.內置函數:這是c+提供的一種可以提高效率的方法,在編譯時將所調用函數的代碼直接嵌入主調函數中,

11、而不是將流程轉出去。指定內置函數的方法只需在函數首行的左端加一個關鍵字inline即可。內置函數雖然能節省運算時間,但是會增加目標程序的長度。因此只將規模小的函數聲明成內置函數。6.函數的重載:C+允許用同一個函數名定義多個函數,這些函數的參數個數和類型不同。這就是函數的重載。是一個函數名可以多用,有不同的含義。7.函數的模板:所謂的函數的模板,實際上就是建立一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型來代表。這個通用函數就是函數模板。凡是函數體相同的函數都可以用這個模板來代替,不必定義多個函數,只需要在模板中定義一次即可。在調用函數系統會根據實參的類型來取代模板中的虛擬類型

12、,從而實現了不同函數的功能。定義函數模板的一般形式為 template < typename T>或template <class T>。用函數模板比函數重載更方便,程序更簡潔。但是只適用于函數的參數個數相同而類型不同。8.有默認參數的函數:有時候在主函數調用別的被調函數時,使用同樣的實參,因此可在定義函數的時候給形參一個默認值。這樣可以簡化編程,提高運行效率。一個函數不能既作為重載函數,又作為有默認參數的函數,因為很容易出現二義性。9.函數的嵌套調用:C+不允許對函數作嵌套定義,也就是說在一個函數中不能完整地包含另一個函數。在一個程序中每一個函數的定義都是互相平行很獨

13、立的。雖然布恩那個嵌套定義函數,但是可以嵌套調用函數。10.函數的遞歸調用:在調用一個函數的過程中又出現直接或間接地調用該函數本身。這就是函數的遞歸調用。11.局部變量和全局變量:所謂的局部變量就是在一個函數內部定義的變量,只在本函數范圍內有效,只能在本函數內才能使用。全局變量是在函數之外定義的變量。全局變量的有效范圍為從定義變量的位置開始到本源文件結束。12.變量的存儲類型:分為兩種,靜態和動態存儲。所謂的靜態存儲方式是指在程序運行期間,系統對變量分配固定的存儲空間。而動態存儲方式則是在程序運行期間,系統對變量動態地分配存儲空間。前面提到的全局變量就是存放在靜態存儲區中,在程序執行的過程中它

14、們占據固定的存儲單元。在動態存儲區中存放的是函數形式參數,和函數中的自動變量,以及函數調用時的現場保護和返回地址等。可以使用static將局部變量變為靜態局部變量。靜態局部變量在靜態存儲區內分配存儲單元。在程序整個運行期間都不釋放。第六章 數組與字符串1.數組的定義:數組是一組相同類型的數據的集合,他們占用連續的存儲單元,數組中的每個數據稱為一個元素。2.一維數組定義:數組的三要素是其名稱,以及每個元素的數據類型,還有就是必須是常量表達式的數據個數。在定義一個數組的時候必須要明確數組中的元素的個數,否則編譯器會報錯。還有要注意的是在訪問數組的時候,最大下表應該為數組元素個數減1,不然會導致程序

15、的異常行為。依然可以使用sizeof()來計算某個數組所包含的元素個數。3.字符數組與字符串:字符數組是指數組里面是存儲字符數據,在c+中,字符串是一空字符(/0)結尾的字符組,空字符是字符串結束的標志。我們可以使用cin對象的getline來安全讀取數據。Getline可以讀取包括空格的整行,也可以限制最多讀取的字符數,或結束字符。可以使用strcpy將字符串復制到另一個字符數組中,增加一個參數可以限制最多復制的字符數,防止寫入的數據時越過數組邊界。使用strcmp來比較字符串的大小,使用strcat連接字符串,使用strlen來獲得字符串的長度。4.多維數組:以為數組可看作是一行數據,二維

16、數組對應由行列構成的數據網絡,其中一維對應于行,另一維對應于列。訪問二維數組中的元素,需要用2個下標,下標都是從0開始的,c+中規定,先指定行下標,再指定列下標。5.創建和使用指針變量:學習指針之前首先要了解一下地址,地址單元的編號就是該單元的地址,它表明了內存單元在內存中的相對位置。變量的類型不同,占用的內存大小也不同。變量占用的首個內存單元的地址就是變量的地址。在C+中可以定義特殊的變量,用來保存普通的變量地址,這就是指針變量。用“*”放在變量前面說明變量是用來存儲一個變量的地址,一般定義一個指針變量的時候要對它進行初始化,這是個良好的習慣。我們通過&,=將一個變量的地址保存到指針

17、變量之中。稱指針變量指向某個變量。要特別注意的是,在指針賦值的時候,取地址的變量類型必須要與指針類型一樣,否則編譯器報錯。值得注意的是,在定義指針變量之后,指針變量前的 * 表示解除引用,表示“存儲在處的值”。6.指針的使用:一 傳遞函數參數,實現對實參的間接修改。二 訪問類中成員數據和成員函數。 三 管理堆中的數據。6.棧和堆:每個程序運行時,會創建5個內存區域:全局名稱空間(全局變量),棧(保存局部變量和函數形參),堆(自由存儲區,是預留給程序員的大塊內存,程序員可以從堆中請求內存空間,使用后釋放內存空間),寄存器(用于內部管理,CPU內部的臨時數據,指令緩存,狀態管理),代碼空間(保存程

18、序指令)。7. 棧和堆的使用:使用new運算符可以從堆中分配內存。堆中分配的內存,沒有對應的變量,只能通過指針間接訪問。而使用delete運算符,可以釋放請求的堆空間。,使用完堆的內存區域后,必須調用delete釋放相應空間,避免內存泄露。在使用了delete 指針之后,該指針將成為懸擺指針,解析或者再次delete該指針將會導致程序崩潰。所以在delete指針后,應賦值指針NULL或者重新分配內存空間delete的本質只是釋放指針所指向的堆空間,對指針本身并沒有什么影響。此時指針依然指向原先的內存位置。第七章 類的基礎概念1.類和對象的定義:我們首先要知道的是抽象是對具體對象問題進行概括,抽

19、出這一類對象的公共性質加以描述的過程。將抽象出的數據成員,代碼成員相結合,視為一個整體,通常我們稱之為封裝。在函數中我們用括起來。繼承是c+中支持層次分類懂得一種機制,允許程序員在保持原有類特性的基礎上,進行更具體的說明。總的來說,類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供統一的抽象描述。其內部包括屬性和行為兩個主要部分。利用類我們可以實現數據的封裝,隱藏,繼承與派生。類一般是用來編寫大型的復雜程序,其模塊化程度比c中采用函數更高。類中的成員分為:數據成員和成員函數。一般在public后面的聲明是類與外部的接口,任何外部函數都可以訪問公有類型數據和函數。而在privat

20、e后面的申明,只允許本類中的函數訪問,而類外部的任何函數都不能訪問。值得注意的一點是,如果在類中不寫private和public的話,那么系統默認是private聲明。在類中定義的變量我們稱為類的對象。內聯函數:為了提高運行是的效率,對于較為簡單的函數可以聲明為內聯形式,而內聯函數不能由復雜的結構,比如循環結構等,在類中聲明內聯成員函數的方式是使用inline關鍵字或者是直接在類中直接定義函數。2.使用對象:定義完類后,在類中創建對象后,可以通過.操縱符來訪問它的成員函數和成員變量,但是只能訪問public部分的成員函數和成員變量。(在定義一個類時候,class 類名 ;分號一定要記得),在類

21、中定義的每個成員函數,都必須要進行定義。類中成員函數的定義與普通函數類似,但需要制動類作用與前綴,表示的為特定某個類的成員函數。3.構造函數和析構函數:構造函數是類中的一種特殊的函數,用于創建對象時,完成對數據成員的初始化。構造函數是由系統自動調用的,每當我們創建對象時,系統就會自動調用相應的構造函數。也就是說,如果沒有聲明構造函數,編譯器自動生成1個默認構造函數,但不執行任何操作。如果聲明了構造函數,往往也需要聲明析構函數,析構函數用于在對象消亡時執行清理工作并釋放配給對象的內存。析構函數為類名之前加,沒有返回類型,不能傳遞任何參數,有且僅有一個。當然析構函數也由系統自動調用,每當對象消亡的

22、時候,系統就會自動調用相應的析構函數。4.const成員函數與常對象5.內聯函數:將普通函數聲明為內聯函數,可以提高運行效率,類的成員函數也可以聲明為內聯。6.對象成員:靜態成員:同一個類不同對象的數據成員所占用的內存空間是不同的。在一些情況下,類的數據成員的值對每個對象都是相同的,如當前已創建對象的數量,這是可以將該數據成員聲明為靜態數據成員。靜態成員的初始化放在類定義的外部。靜態成員又分為靜態數據成員和靜態成員函數。,靜態數據成員具有全局性,供類的所有對象共享。靜態成員函數只能訪問類的靜態成員,而不能訪問類的非靜態成員。因為當通過類名和運算符:調用一個靜態成員時,不能確定函數中所訪問的非靜

23、態成員屬于哪個對象。7.類地友元:友元函數實在類聲明中由關鍵字friend修飾說明的非成員函數,在它的函數體中能夠通過對象名訪問private和protect成員,能增加靈活性,使程序員可以再封裝和快速性方面做合理選擇。訪問對象中的成員必須通過對象名。若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員,一樣用friend關鍵字,要注意的是友元類的關系是單向的,若B是A類的友元,只能B訪問A的私有和保護數據。反之不行。8.const成員函數與常對象:將類中某些只會讀取數據成員的函數聲明為常成員函數,只要在函數頭的結尾加上const,因此在常成員函數中不能修改數據成員,否則編譯器將

24、報錯。要養成好的編程習慣就要盡可能的將成員函數聲明為常成員函數,這樣可以防止對數據成員的意外修改。常對象:常類型的對象必須進行初始化,而且不能被更新。需要注意的是通過常對象只能調用它的常成員函數。常引用:在聲明引用時用const修飾,被聲明的引用就是常引用,常引用所引用的對象也是不能被更新。9.類中的指針應用:類似在堆中創建一個普通類型數據空間,也可以在堆中創建一個類的對象。用完之后用delete釋放對象,將調用對象的析構函數,然后釋放堆中的內存。訪問堆中創建對象的方法,只能通過指針間接訪問,兩種訪問方式:(*對象名).成員函數名;對象名->成員函數名。指針數據成員:類中包含的指針數據成

25、員,每個指針指向堆中的對象。如果類中含有指針數據成員,就要編寫析構函數來釋放內存,以免造成內存泄露。第八章 繼承與多態1.繼承的概覽:一個新類可以從現有的類繼承特征,特征表示屬性和方法,而從現有的類產生新類的過程稱為派生。一般我們稱現有的用來派生新類的類稱為基類或父類,而派生出來的類稱為派生類或者子類,當然派生類可以作為基類繼續來派生類,從而形成類的層次結構。 派生類的定義是 class 派生類名:繼承方式 基類名 private: protected: public:。2.繼承方式:繼承方式分為三種,分別是public:公有繼承;private:私有繼承;protected:保護繼承。通常我

26、們在派生類 類體中添加數據成員以及成員函數,而基類的成員將自動的稱為派生類的成員,不用再去編寫。派生類不能直接訪問基類的私有成員。公有繼承(public):特點就是基類的公有成員和保護成員作為派生類的成員時,保持原有狀態,而基類的私有成員還是私有,不能被派生類訪問。私有繼承(private):私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,并且不能被這個派生類的子類所訪問。保護繼承(protected):其特點就是基類的所有公有成員和保護成員都成為派生類的保護成員,并且只能被它的派生類成員函數,或者友元訪問,而基類的私有成員依然是私有的。 派生類中除了擁有新定義的成員外,派生類

27、還擁有基類的所有成員(當然除了基類的構造函數和賦值操作符重載函數除外)。在定義派生類的時候一定要見到基類的定義。 派生類與友元的關系:在派生類中沒有顯式說明,基類的友元不是派生類的友元,如果基類是另一個類的友元,而該類沒有顯式說明,則派生類也不是該類的友元。封裝與繼承的矛盾:在派生類中定義新的成員的時候,往往需要用到基類的一些private成員,于是這時候就需要用到protected,protected的成員不能被對象使用,但是可以在派生類中使用。Protected訪問控制緩解了瘋轉與繼承的矛盾。派生類成員標識符的作用域:派生類成員名的作用域嵌套在基類作用域中,如果派生類中定義了與基類同名的成

28、員,則基類同名成員時要用基類名加標識符。3.構造與析構:派生類的對象的數據結構是有基類中說明的數據成員和派生類中說明的數據成員共同構成。將派生類的對象中由基類中說明的數據成員和操作所構成的封裝體稱為基類子對象,它由基類中的構造函數進行初始化。由于構造函數不能夠被繼承,因此派生類的構造函數必須通過調用基類的構造函數來初始化基類子對象。所以在定義派生類的構造函數是除了對自己的數據成員進行初始化外,還必須負責調用基類構造函數使基類數據成員得以初始化。如果派生類中還有子對象是,還應包含對子對象初始化的構造函數。當對象被刪除是,派生類的析構函數被執行。由于析構函數也不能被繼承,因此在執行派生類的析構函數

29、是,基類的析構函數也將被調用。在派生類中是否定義析構函數與基類無關。若派生類對象在退出其作用域前,有數據需要做善后工作,就需要定義析構函數,基類的析構函數不會因派生類沒有析構函數而得不到執行,他們各自是獨立的。若基類,成員類,派生類都有析構函數,則執行的順序是:先自己(派生類),再客人(成員對象),后祖先(基類)。其順序與執行構造函數的順序正好是相反的。派生類構造函數在積累中有缺省的構造函數的情況下,或者是根本沒有定義構造函數時可以省略對基類構造函數的調用。若基類構造函數有參數,則派生類必須定義構造函數,提供將參數傳遞給基類構造函數。4.多重繼承:多繼承可以看做是單繼承的擴展。所謂多繼承是指派

30、生類具有多個基類,派生類與每個基類之間的關系仍可以看作是一個單繼承。多繼承的繼承方式及訪問控制的規定同但繼承,派生類擁有所有基類的所有成員。多繼承下派生類的構造函數與單繼承下派生類構造函數相似,它必須同時負責該派生類所有基類構造函數的調用。同時,派生類的參數個數必須包含完成所有基類初始化所需要的參數個數。派生類構造函數執行的順序是先執行所有的基類的構造函數,然后在執行派生類本身構造函數,處于同一層次的個基類構造函數的執行順序取決于定義派生類是所指定的個基類順序,與派生類構造函數中所定義的成員初始化列表的各項順序其實是無關的的。,所以由此可見,派生類構造函數的成員初始化列表中各項順序可以任意的排

31、列。由于是多繼承的情況下,所以可能造成對基類中某成員的訪問出現了不唯一的情況,因此產生二義性,所以需要使用作用域運算符:來進行限定。:作用域運算符也可以用來限定一些不同基類中的同名成員函數。重復繼承-虛基類構造函數:C+中規定,虛基類子對象是由最派生類的構造函數通過調用虛基類的構造函數進行初始化,如果一個派生類有一個直接或者間接地虛基類,那么派生類的構造函數的成員初始列表中必須列出對虛基類構造函數的調用,如果沒有列出,則表示使用該虛基類的缺省構造函數來初始化派生類對象中的虛基類子對象。而且在一個成員初始化列表中出現對虛基類和非虛基類構造函數的調用,則虛基類的構造函數先于非虛基類的構造函數的執行

32、。5.多態概述:多態指不同對象接收到相同消息時,產生不同的行為(調用不同的方法)。其實就是使用同一個函數名,調用不同內容的函數,實現“一個接口,多種方法”。我們都知道在C+中通過覆蓋,運算符重載,虛函數等技術,使得基類和派生類中可以出現同名的成員函數。不同的成員函數被調用的時候表現出的不同的行為,表現出很強的靈活性。靜態多態性:編譯時的多態性,成員函數重載,覆蓋,運算符重載都屬于靜態多態性。編譯 器根據實參數據類型或對象的數據類型,在編譯時就確定調用哪個函數。動態多態性:運算時多態性,通過虛函數來實現。通過虛函數實現的動態多態性,在代碼執行的過程中決定調用哪個函數。重載:同一個類中,存在名稱相

33、同但“簽名不同”的成員函數,其實就是其參數類型或者類型不同罷了,編譯的時候根據實參類型確定調用的是哪個版本的函數。覆蓋:派生類和基類存在名稱相同的成員函數,實現派生類方法覆蓋基類方法的功能。若要訪問基類被覆蓋的函數,要使用類名前綴。賦值兼容性規則:每一個派生類的對象,都是基類的一個對象。賦值兼容規則是指在公有派生情況下,一個公有派生類的對象可以當做基類的對象使用,反之是禁止的。6.虛函數與運行時多態:實現一個接口,多種方法。虛函數實現動態性關鍵在于使用基類指針,當用基類指針指向不同對象時,到底調用哪個版本成員函數,取決于所指向對象的類型。虛函數的實現的多態性是代碼執行過程中的多態,大大增加了程

34、序的靈活性。需要注意的是在基類中定義虛函數后,往往在派生類中重新定義,才能實現動態多態性。在基類中定義的虛函數,在派生類中重定義后仍然為虛函數,即使不寫virtual關鍵字。虛函數必須是類的共有或保護成員函數;友元函數和非成員函數不能聲明為虛函數;構造函數和靜態成員函數不能被聲明為虛函數;析構函數可以被聲明為虛函數。虛析構函數:C+中規定了在某個類中含有虛函數,則應該將其析構函數設置為虛函數。否則很容易發生內存泄露等問題。純虛函數:在基類中定義為虛函數,但不提供實現部分,而是要求各派生類提供該虛函數的不同版本的實現。抽象類(不能創建對象):凡是含有純虛函數的類稱為抽象類,抽象類往往描述的是一般

35、抽象概念,如形狀類,動物類,其中的純虛函數如area沒有實際意義,不能提供實現代碼,要求派生類提供自己版本的實現代碼,C+規定了不能在內存中創建抽象類對象,無論是定義抽象類對象,作為形參或返回值,還是動態創建抽象類對象都是非法的,但是可以定義一個抽象類指針(引用),并用該指針指向不同的派生類對象,以實現多態性。抽象類作用是為派生類提供一個基本框架和一個公共的對外接口。面向對象程序設計的多態性在c+中,把類看作類型,把以public方式繼承的派生類看作是基類的子類型,這就產生了以下的多態:派生類對象的類型既可以是派生類,也可以是基類,即一個對象可以屬于多種類型。基類的指針或引用可以指向引用基類對象,也可以指向或引用派生

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論