(精品)C-知識點總結(jié)剖析124_第1頁
(精品)C-知識點總結(jié)剖析124_第2頁
(精品)C-知識點總結(jié)剖析124_第3頁
(精品)C-知識點總結(jié)剖析124_第4頁
(精品)C-知識點總結(jié)剖析124_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章為選讀1.數(shù)據(jù)成員 -不能初始化2.成員函數(shù) -可以使用類中的所有成員(變量和函數(shù))1聲明與實現(xiàn)都定義在類內(nèi)部2聲明在類內(nèi)部,實現(xiàn)在類外部3.private-1類內(nèi)可以被訪問2類外不能被直接訪問,通過公有成員函數(shù)訪問3默認類型 (數(shù)據(jù)成員常用 )4繼承關(guān)系中,子類不可以訪問父類的private 成員4.protected-1類內(nèi)可以被訪問2類外不能被直接訪問,通過公有成員函數(shù)訪問3繼承關(guān)系中,子類可以訪問父類的protected成員5.public-1類內(nèi)和類外都可以被訪問2成員函數(shù)常用6.構(gòu)造函數(shù) -1特殊的類成員函數(shù)為新對象分配內(nèi)存空間2功能:為新對象分配內(nèi)存空間;初始化數(shù)據(jù)成員3寫

2、法: a.構(gòu)造函數(shù)名與類名相同b.沒有返回時值類型c.可以重載d.一般為 public(例如:在成員函數(shù)里生成對象,可以為私有)4使用:聲明對象(或需要構(gòu)造新對象)時系統(tǒng)自動調(diào)用5默認構(gòu)造函數(shù)(只有一個,無參數(shù) /每個參數(shù)都有默認值,無函數(shù)體)7.析構(gòu)函數(shù) -1特殊的類成員函數(shù),回收內(nèi)存空間2功能:撤銷類的對象3寫法: a.析構(gòu)函數(shù)名與類名相同,前面冠以b.沒有參數(shù),返回時值類型c.不可以重載,只有一個d.公有4使用:撤銷對象時系統(tǒng)自動調(diào)用5默認析構(gòu)函數(shù)(只有一個,無參數(shù) /每個參數(shù)都有默認值,無函數(shù)體) 構(gòu)造函數(shù)與析構(gòu)函數(shù)調(diào)用順序:先構(gòu)造后析構(gòu),后構(gòu)造先析構(gòu)8.引用 -1已經(jīng)定義的變量的別名

3、,不為其分配內(nèi)存空間2& 是引用類型說明符3聲明引用時,必須同時對其進行初始,且不能再把該引用名作為其他變量名的別別名4不能建立數(shù)組的引用,只能建立數(shù)組元素的引用。5使用: a.引用作為函數(shù)參數(shù)-類似于地址傳值b.引用作為函數(shù)返回值 -一般函數(shù)返回值時,要生成一個臨時變量作為返回值的副本,而用引用作為返回值時,不生成值的副本。注意:引用作為函數(shù)的返回值的情況:I.全局變量II. 引用參數(shù)傳遞過來的變量#不能是函數(shù)中的局部變量,這時返回的局部變量地址已經(jīng)失效。9.復(fù)制構(gòu)造函數(shù):特殊的構(gòu)造函數(shù)1功能:用一個已經(jīng)存在的對象去初始化一個新的同類對象2寫法: a.函數(shù)名與類名相同b.形參是本類對象的引用

4、,無返回值類型c.默認拷貝構(gòu)造函數(shù) /自定義拷貝構(gòu)造函數(shù)3以下情況時,系統(tǒng)自動調(diào)用復(fù)制構(gòu)造函數(shù)a.用一個對象初始化另一個對象b.函數(shù)形參是類的對象,函數(shù)形參和實參結(jié)合時c.函數(shù)返回值是類的對象,當(dāng)函數(shù)返回時10.成員對象與構(gòu)造函數(shù)1定義:類中的成員,除了成員數(shù)據(jù)和成員函數(shù)外,還有成員對象,即用其他類的對象作為類的成員,也稱為對象成員,使用成員對象的技術(shù)稱為聚合。成員對象是實體,系統(tǒng)不僅為它分配內(nèi)存,而且要進行初始化。2構(gòu)造函數(shù)寫法:類名 : 構(gòu)造函數(shù)名 (參數(shù)總表 ): 對象成員 1(參數(shù)名表 1),對象成員2(參數(shù)名表 2), 對象成員 n(參數(shù)名表 n) /參數(shù)總表:含數(shù)據(jù)類型;參數(shù)名表:

5、不含數(shù)據(jù)類型構(gòu)造函數(shù)可以采用多種方法對數(shù)據(jù)成員初始化:在構(gòu)造函數(shù)體中初始化在構(gòu)造函數(shù)頭部初始化混合初始化3構(gòu)造函數(shù)調(diào)用順序:含對象成員的類對象的初始化時,首先依次自動調(diào)用各成員對象的構(gòu)造函數(shù),再執(zhí)行該類對象自己的構(gòu)造函數(shù)的函數(shù)體部分。各成員對象的構(gòu)造函數(shù)調(diào)用的次序與 類定義中說明的順序一致,而與它們在構(gòu)造函數(shù)成員初始化列表中的順序無關(guān)。4析構(gòu)函數(shù)調(diào)用順序:因為析構(gòu)函數(shù)沒有參數(shù),所以包含成員對象的類的析構(gòu)函數(shù)形式上并無特殊之處。但是撤銷該類對象時,會首先調(diào)用自己的析構(gòu)函數(shù),再調(diào)用成員對象的析構(gòu)函數(shù),調(diào)用次序與初始化時的次序相反。運算符重載1定義:運算符的重載是特殊的函數(shù)重載,必須定義一個函數(shù),并

6、通知 C+編譯器,當(dāng)遇到該重載的運算符時調(diào)用此函數(shù)。對運算符進行定義叫做運算符重載函數(shù),通常為類的成員函數(shù)。2寫法:a. 返回值類型operator 重載的運算符 (參數(shù)表 ) /operator 是關(guān)鍵字,它與重載的運算符一起構(gòu)成函數(shù)名。 b.引用作為參數(shù): const 引用Complex operator+(const Complex &c) 注意:參數(shù)采用對象的引用而不是對象本身,調(diào)用時不再重新分配內(nèi)存建立一個復(fù)制的對象,函數(shù)效率會更高。而在引用形式參數(shù)類型說明前加const 關(guān)鍵字,表示被引用的實參是不可改變的,如程序員不當(dāng)心在函數(shù)體中重新賦值了被引用的實參,C+ 編譯器會認為出錯。附

7、加 : const 引用可以實現(xiàn)不可尋址的值,或不同數(shù)據(jù)類型的引用constint &q=7;q 的值不能變int p=3;constdouble &q=p;= double t=p;constdouble &q=t;/t為臨時變量3實現(xiàn):運算符的左操作數(shù)一定是對象,因為重載的運算符是該對象的成員函數(shù),而右操作數(shù)是該函數(shù)的參數(shù)。c3=c1+c2 解釋為: c1.operator+(c2) ;用標(biāo)示符 temp 表示返回的臨時變量, c3=temp,解釋為:c3.operator=(temp)4默認的賦值重載運算符Complex &operator+(const Complex &c) /返回值

8、類型是為了a=b=c 的形式5右操作數(shù)不是類的對象c3=c1+0.6;c3= 0.6+c1; (錯誤 ,用友元解決)Complex operator+(const Complex &c) 或Complex operator+(double c) 6不允許重載的運算符?:./.*:sizeof友元1定義 :某一個類的友元( friend)函數(shù)不屬于該類,但可以在類外訪問該類中的任何成員,包括私有數(shù)據(jù)。友元函數(shù)用關(guān)鍵字friend 說明。2寫法: friend complex operator + (const complex &c1,const complex &c2)/“const 引用 ”作

9、為參數(shù),可以實現(xiàn):a+0.6;0.6+a;a+b3說明:a. friend 只用于類說明中,定義時不加friendb.注意友元不是成員函數(shù),但可以直接訪問私有成員c. d+c 被 C+編譯器解釋為: operator+(d,c)d.友元函數(shù)不受類中的訪問權(quán)限關(guān)鍵字限制,可以把它放在類的公有、私有、保護部分,但結(jié)果一樣。 4 運算符重載的三種形式成員函數(shù)形式友元函數(shù)形式全局函數(shù)形式成員函數(shù)形式友元函數(shù)形式全局函數(shù)形式CInt operator+(const CInt &r);friend CInt operator+(const Cint &r1,const CInt &r2);CInt ope

10、rator+(const Cint &r1,const CInt &r2);函數(shù)調(diào)用特點說明a.operator+(b)1.定義為類的成員函數(shù)1.左操作數(shù)作為當(dāng)前對象通過this 指針訪2.左操作數(shù)必須是類的問對象2.右操作數(shù)通過函數(shù)參數(shù)訪問3.右操作數(shù)設(shè)為函數(shù)參數(shù)operator+(a,b)1.定義為類的友元函數(shù)1.作為類的友元直接訪問對象的私有數(shù)據(jù)2.左操作數(shù)不一定是類成員的對象2.有些運算符的參數(shù)只能為特定類型,如,3.左右操作數(shù)按順序作流插入運算符 ” 只能重載為類的成員函數(shù)的運算符:賦值運算符=復(fù)合賦值運算符+= ,-=,*=, /=函數(shù)調(diào)用運算符()下標(biāo)運算符成員訪問運算符-13.

11、靜態(tài)成員:是指聲明為static 的類成員1在類的范圍內(nèi)所有對象共享的某個數(shù)據(jù),靜態(tài)數(shù)據(jù)成員不屬于類的某一特定對象,而是屬于整個類。2無論私有或非私有,必須在類外初始化,用(:)來指明所屬的類。3靜態(tài)成員函數(shù)只能直接訪問類中的靜態(tài)成員。4非靜態(tài)成員時,必須借助對象名或指向?qū)ο蟮闹羔槨?靜態(tài)成員(變量和函數(shù))可以用類名或?qū)ο竺L問。14.指針:1指向?qū)ο蟮闹羔?-引用成員方式:- 或*.補充 a. 指向 const對象的指針 :const int i = 9;const int *p = &i ;/允許給 p 指針重新賦值,使其指向另一個const 對象,但是不允許通過 p 指針來修改所指對象的

12、值。b. const指針 :int i = 0 ;int *const p = &i ;/const 指針的值是不能被修改的,這意味著不能使其指向其他的對象。所以在定義的時候就必須要初始化。c.指向 const 對象的 const 指針 :const i = 10; const int *const p = &i ;/既不能修改指針p 所指向的對象的值,也不允許修改該指針p 的指向2this 指針a.定義: 只能在一個類的成員函數(shù)中調(diào)用,它表示當(dāng)前對象的地址b.使用: (1) 數(shù)據(jù)成員與成員函數(shù)參數(shù)同名時成員函數(shù)返回值時當(dāng)前類的對象15.string 類C+的字符串string 類,它重載了運

13、算符,連接、索引和復(fù)制等操作不必使用函數(shù),使運算更加方便,而且不易出錯。#includeusing namespace std;16.多文件結(jié)構(gòu)模板通用的代碼就必須不受數(shù)據(jù)類型的限制,可以把數(shù)據(jù)類型改為一個設(shè)計參數(shù)。這種類型的程序設(shè)計稱為參數(shù)化(parameterize)程序設(shè)計。17.函數(shù)模板:1定義:用來創(chuàng)建一個通用函數(shù),支持多種不同類型形參。2寫法:template返回類型函數(shù)名 ( 形式參數(shù)表 ) 尖括號中不能為空,參數(shù)可以有多個,用逗號分開。/由關(guān)鍵字class 或 typename(建議用typename) 后加一個標(biāo)識符構(gòu)成。3使用:使用函數(shù)模板,只需以函數(shù)模板名為函數(shù)名進行函數(shù)

14、調(diào)用:函數(shù)名(數(shù)據(jù)實參表);18.類模板 :1寫法:template class 類名 ;template 返回類型類名 :成員函數(shù)名 ( 形參表)2說明:a.類模板的定義格式與類相同,包含數(shù)據(jù)成員與成員函數(shù)b.類模板中的成員函數(shù)都是函數(shù)模板c.函數(shù)聲明(聲明與定義分開)時不加“template”d.模板參數(shù)有兩種:模板類型參數(shù)和模板非類型參數(shù)。3使用:類模板名 對象名 (初始化參數(shù)表 )4模板非類型參數(shù):表示該參數(shù)名代表了一個常量。19.模板與類參數(shù):在面向?qū)ο蟪绦蛟O(shè)計中,函數(shù)模板有兩種常見的應(yīng)用方式:1函數(shù)模板作為類模板的成員函數(shù),在模板類型參數(shù)中重載函數(shù)與運算符,直接訪問私有數(shù)據(jù)成員,實

15、現(xiàn)通用算法。2獨立的函數(shù)模板(非成員函數(shù))處理模板類(或普通類,或普通數(shù)據(jù)),以類模板為參數(shù),借助模板類型參數(shù)中重載的函數(shù)或運算符實現(xiàn)通用算法。20.動態(tài)內(nèi)存分配1動態(tài)分配與釋放a.分配:當(dāng)程序運行到需要動態(tài)分配變量或?qū)ο髸r,必須向系統(tǒng)申請取得自由存儲區(qū)中的一塊所需大小的存儲空間,用于存儲該變量或?qū)ο蟆V羔樧兞棵?=new 類型名 (初始化式 );b.釋放:當(dāng)不再使用該變量或?qū)ο髸r,也就是它的生命結(jié)束時,要顯式釋放它所占用的存儲空間,這樣系統(tǒng)就能進行再次分配,做到重復(fù)使用有限的資源。delete 指針名 ;/這時釋放了pi 所指的目標(biāo)的內(nèi)存空間,也就是撤銷了該目標(biāo),稱動態(tài)內(nèi)存釋放,但指針pi

16、本身并沒有撤銷,該指針?biāo)純?nèi)存空間并未釋放。C.數(shù)組的動態(tài)內(nèi)存分配指針變量名=new類型名 下標(biāo)表達式;/“ 下標(biāo)表達式 ” 可以是變量表達式char *pc;int n;cinn;/動態(tài)數(shù)組個數(shù)pc=new charn;/ 申請內(nèi)存strcpy(pc,”china”);delete pc;/釋放內(nèi)存delete 指向該數(shù)組的指針變量名;特點: i. 下”標(biāo)表達式 ”可以在運行時確定如果有 char *pc1,令 pc1=pc,同樣可用 delete pc1 來釋放該空間。沒有初始化式,不可對數(shù)組初始化。2自由存儲區(qū)對象與構(gòu)造函數(shù)通過 new 建立的對象要調(diào)用構(gòu)造函數(shù),通過delete 刪除對

17、象也要調(diào)用析構(gòu)函數(shù)。3淺復(fù)制與深復(fù)制a.淺復(fù)制:默認復(fù)制構(gòu)造函數(shù),可用一個類對象初始化另一個類對象,稱為默認的按成員復(fù)制,而不是對整個類對象的按位復(fù)制。這稱為淺復(fù)制。b.深復(fù)制:重新定義復(fù)制的構(gòu)造函數(shù),給每個對象獨立分配一個自由存儲區(qū)對象,稱深復(fù)制。21.繼承1定義:被繼承的類稱為基類( base class)或超類( superclass),新的類為派生類( derived class)或子類( subclass)。2寫法:派生類的定義:class 派生類名:訪問限定符基類名 1,訪問限定符基類名 2, ,訪問限定符基類名 nprivate:成員表 1; /派生類增加或替代的私有成員publ

18、ic:成員表 2; /派生類增加或替代的公有成員protected:成員表 3; /派生類增加或替代的保護成員 ;3訪問限定符:公有派生是絕對主流繼承方式基類特性派生類特性在派生類對象訪問基類成員(派生類中對基類成員的訪問限定)公有繼承publicpublic可訪問protectedprotected不可訪問private不可訪問不可訪問私有繼承publicprivate不可訪問protectedprivate不可訪問private不可訪問不可訪問保護繼承publicprotected不可訪問protectedprotected不可訪問private不可訪問不可訪問4派生類構(gòu)造函數(shù)派生類名(參

19、數(shù)總表) :基類名 1(參數(shù)名表 1),基類名 2(參數(shù)名表 2),基類名 n(參數(shù)名表 n),成員對象名 1(成員對象參數(shù)名表 1), ,成員對象名 m(成員對象參數(shù)名表 m) /派生類新增成員的初始化; / 所列出的成員對象名全部為新增成員對象的名字5派生類構(gòu)造函數(shù)各部分執(zhí)行次序:a.調(diào)用基類構(gòu)造函數(shù),按它們在派生類定義的先后順序,順序調(diào)用。b.調(diào)用成員對象的構(gòu)造函數(shù),按它們在類定義中聲明的先后順序調(diào)用。c.派生類的構(gòu)造函數(shù)體中的操作。/注意:1.如果基類沒有定義構(gòu)造函數(shù),則派生類也可以不定義,全部采用系統(tǒng)給定的默認構(gòu)造函數(shù)。如果基類定義了帶有形參表的構(gòu)造函數(shù)時,派生類就應(yīng)當(dāng)定義構(gòu)造函數(shù),

20、顯式給出基類名和參數(shù)表。6析構(gòu)函數(shù)調(diào)用次序與構(gòu)造函數(shù)相反22.多重繼承1基類構(gòu)造函數(shù)的調(diào)用順序:a.派生類構(gòu)造函數(shù)執(zhí)行順序是先執(zhí)行所有基類的構(gòu)造函數(shù),再執(zhí)行派生類本身構(gòu)造函數(shù)。b.處于同一層次的各基類構(gòu)造函數(shù)的執(zhí)行順序取決于定義派生類時所指定的各基類順序,與派生類構(gòu)造函數(shù)中所定義的成員初始化列表的順序無關(guān)。多繼承時的重名成員 :2在多個基類中有重名的成員:使用作用域運算符 :訪問重名的成員23. 虛基類1引入:a.多繼承時,發(fā)生了重名成員。且這些重名成員來自同一個間接基類。b.將共同基類設(shè)置為虛基類,從不同路徑繼承過來的同名數(shù)據(jù)成員在內(nèi)存中就只有一個拷貝,同一個函數(shù)名也只有一個映射。2寫法:c

21、lassclass派生類名派生類名:virtual訪問限定符:訪問限定符virtual基類類名基類類名.;.;3構(gòu)造函數(shù):派生類名 (參數(shù)總表 ): 基類名 1(參數(shù)名表 1), ,成員對象名 1(成員對象參數(shù)名表 1), ,底層虛基類名 1(參數(shù)名表 1), , 底層虛基類名 r( 參數(shù)名表 r) ;/在多層虛擬繼承構(gòu)造函數(shù)中,基類名不僅要列出直接基類,而且要列出底層虛基類,否則編譯器認為出錯。如不是虛擬繼承只能列直接基類。4構(gòu)造函數(shù)調(diào)用順序首先是虛基類的構(gòu)造函數(shù)并按它們聲明的順序構(gòu)造。第二是非虛基類的構(gòu)造函數(shù)按它們聲明的順序調(diào)用。第三是成員對象的構(gòu)造函數(shù)。最后是派生類自己的構(gòu)造函數(shù)被調(diào)用。

22、24派生類應(yīng)用討論1派生時的同名覆蓋 :a.數(shù)據(jù)成員的同名覆蓋b.成員函數(shù)的同名覆蓋c.使用作用域運算符 :訪問被覆蓋的成員2 賦值兼容規(guī)則:在任何需要基類對象的地方都可以用公有派生類的對象來代替:派生類的對象可以賦值給基類的對象,這時是把派生類對象中從對應(yīng)基類中繼承來的成員賦值給基類對象。反過來不行,因為派生類的新成員無值可賦??梢詫⒁粋€派生類的對象的地址賦給其基類的指針變量,但只能通過這個指針訪問派生類中由 基類繼承來的成員 ,不能訪問派生類中的新成員。同樣也不能反過來做。派生類對象可以初始化基類的引用。引用是別名,但這個別名只能包含派生類對象中的由 基類繼承來的成員 。3繼承與聚合:繼承使派生類可以利用基類的成員,如果我們把基類的對象作為一個新類的對象成員,也可以取得類似的效果。派生類采用繼承方法,成員對象是聚合的概念。4派生類與模板:模板追求的是運行效率,而派生追求的是編程的效率。25多態(tài)性與虛函數(shù)編譯時的多態(tài)性通過函數(shù)的重 載和運算符的重 載在C+ 中有兩種多態(tài)性運行時的多態(tài)性運行時的多態(tài)性是指在程序執(zhí)行前,無法根據(jù)函數(shù)名和參數(shù)來確定該調(diào)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論