版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中科研CASoft軟件工程師培訓(xùn)講義Game
Master游戲修改工具第2講從C到C++(2)中科天地軟件人才培訓(xùn)中心Created
by本講重點(diǎn)提要繼承與派生多態(tài)性繼承與派生類(lèi)描述了一組有相同特性(數(shù)據(jù)元素)和相同行為(函數(shù))的對(duì)象。類(lèi)實(shí)際上就是數(shù)據(jù)類(lèi)型,例如,浮點(diǎn)數(shù)也有一組特性和行為。區(qū)別在于程序員定義類(lèi)是為了與具體問(wèn)題相適應(yīng),而不是被迫使用已存在的數(shù)據(jù)類(lèi)型。類(lèi)型不僅僅說(shuō)明一組對(duì)象上的約束,還說(shuō)明與其他類(lèi)
型之間的關(guān)系。兩個(gè)類(lèi)型可以有共同的特性和行為,
但是,一個(gè)類(lèi)型可能包括比另一個(gè)類(lèi)型更多的特性,
也可以處理更多的消息(或?qū)ο⑦M(jìn)行不同的處理)。繼承表示了基本類(lèi)型和派生類(lèi)型之間的相似性。一個(gè)
基本類(lèi)型具有所有由它派生出來(lái)的類(lèi)型所共有的特性
和行為。程序員創(chuàng)建一個(gè)基本類(lèi)型以描述系統(tǒng)中一些
對(duì)象的思想核心。由這個(gè)基本類(lèi)型派生出其他類(lèi)型,
表達(dá)了認(rèn)識(shí)該核心的不同途徑。繼承與派生比如設(shè)計(jì)一個(gè)類(lèi)來(lái)表示“形體”,每個(gè)
形體有大小、顏色、位置等。每個(gè)形體
能被繪制、擦除、移動(dòng)、著色等。由此,可以派生出特殊類(lèi)型的形體:圓、正方
形、三角形等,它們中的每一個(gè)都有另
外的特性和行為,例如,某些形體可以
翻轉(zhuǎn)。有些行為可以不同(計(jì)算形體的
面積)。類(lèi)型層次結(jié)構(gòu)既體現(xiàn)了形體間
的類(lèi)似,又體現(xiàn)了它們之間的區(qū)別。繼承與派生基本概念保持已有類(lèi)的特性而構(gòu)造新類(lèi)的過(guò)程稱(chēng)為繼承。在已有類(lèi)的基礎(chǔ)上新增自己的特性而產(chǎn)生新類(lèi)的過(guò)程稱(chēng)為派生。被繼承的已有類(lèi)稱(chēng)為基類(lèi)(或父類(lèi))。派生出的新類(lèi)稱(chēng)為派生類(lèi)。繼承的目的:實(shí)現(xiàn)代碼重用。派生的目的:當(dāng)新的問(wèn)題出現(xiàn),原有程序無(wú)法解決(或不能完全解決)時(shí),需要對(duì)原有程序進(jìn)行改造。繼承與派生派生類(lèi)的定義方法class
派生類(lèi)名:繼承方式(public/private/protected)基類(lèi)名1,基類(lèi)名2,
….{成員定義;}多繼承:一個(gè)派生類(lèi)有多個(gè)基類(lèi);單繼承:一個(gè)派生類(lèi)只有一個(gè)基類(lèi)。public指明了基類(lèi)是一公有基類(lèi),也可以用private來(lái)指明基類(lèi)為一私有基類(lèi)用戶(hù)沒(méi)有指明private或public時(shí),系統(tǒng)默認(rèn)為private繼承與派生共有三種繼承方式:公有繼承(public),私有繼承(private),保護(hù)繼承(protected)。繼承方式指定派生類(lèi)成員以及類(lèi)外對(duì)象對(duì)繼承來(lái)的成員的訪問(wèn)權(quán)限。不同繼承方式的影響主要體現(xiàn)在:派生類(lèi)成員對(duì)基類(lèi)成員的訪問(wèn)控制。派生類(lèi)對(duì)象對(duì)基類(lèi)成員的訪問(wèn)控制。繼承與派生公有繼承基類(lèi)的public和protected成員的訪問(wèn)屬性在派生類(lèi)中保持不變,但基類(lèi)的
private成員不可訪問(wèn)。派生類(lèi)中的成員函數(shù)可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能訪問(wèn)基類(lèi)的
private成員。派生類(lèi)的對(duì)象只能訪問(wèn)基類(lèi)的public成員。繼承與派生私有繼承基類(lèi)的public和protected成員都以
private身份出現(xiàn)在派生類(lèi)中,但基類(lèi)的
private成員不可訪問(wèn)。派生類(lèi)中的成員函數(shù)可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能訪問(wèn)基類(lèi)的
private成員。派生類(lèi)的對(duì)象不能訪問(wèn)基類(lèi)中的任何成員。繼承與派生保護(hù)繼承基類(lèi)的public和protected成員都以
protected身份出現(xiàn)在派生類(lèi)中,但基類(lèi)的private成員不可訪問(wèn)。派生類(lèi)中的成員函數(shù)可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能訪問(wèn)基類(lèi)的
private成員。派生類(lèi)的對(duì)象不能訪問(wèn)基類(lèi)中的任何成員。繼承與派生訪問(wèn)權(quán)限的派生傳遞關(guān)系派生類(lèi)private
private基類(lèi)public派生類(lèi)作用區(qū)域外privatepublic派生類(lèi)作用區(qū)域內(nèi)不可見(jiàn)不可見(jiàn)不可見(jiàn)protectedpublicprotected
privatepublic
publicprivateprivate派生類(lèi)作
派生類(lèi)作用區(qū)域內(nèi)
用區(qū)域外不可見(jiàn)不可見(jiàn)不可見(jiàn)繼承與派生繼承時(shí)的構(gòu)造函數(shù)基類(lèi)的構(gòu)造函數(shù)不被繼承,需要在派生類(lèi)中自行定義。定義構(gòu)造函數(shù)時(shí),只需要對(duì)本類(lèi)中新增成員進(jìn)行初始化,對(duì)繼承來(lái)的基類(lèi)成員的初始化由基類(lèi)的構(gòu)造函數(shù)完成。但派生類(lèi)構(gòu)造函數(shù)的定義中,要提供基類(lèi)構(gòu)造函數(shù)所需要的參數(shù)。單一繼承時(shí)的構(gòu)造函數(shù)派生類(lèi)名::派生類(lèi)名(基類(lèi)所需的形參,本類(lèi)成員所需的形參):基類(lèi)名(參數(shù)){本類(lèi)成員初始化賦值語(yǔ)句;};–
如:C::C(int
i,int
j):B(I)繼承與派生多繼承時(shí)的構(gòu)造函數(shù)派生類(lèi)名::派生類(lèi)名(基類(lèi)1形參,基類(lèi)2形參,...基類(lèi)n形參,本類(lèi)形參):基類(lèi)名1(參數(shù)),基類(lèi)名2(參數(shù)),...基類(lèi)名n(參數(shù)){本類(lèi)成員初始化賦值語(yǔ)句;};當(dāng)基類(lèi)中定義有缺省形式的構(gòu)造函數(shù)或未定義構(gòu)造函數(shù)時(shí),派生類(lèi)構(gòu)造函數(shù)的定義中可以省略對(duì)基類(lèi)構(gòu)造函數(shù)的調(diào)用若基類(lèi)中未定義構(gòu)造函數(shù),派生類(lèi)中也可以不定義,全采用缺省形式構(gòu)造函數(shù)。當(dāng)基類(lèi)定義有帶形參的構(gòu)造函數(shù)時(shí),派生類(lèi)也應(yīng)定義構(gòu)造函數(shù),提供將參數(shù)傳遞給基類(lèi)構(gòu)造函數(shù)的途徑。繼承與派生構(gòu)造函數(shù)的調(diào)用次序調(diào)用基類(lèi)構(gòu)造函數(shù),調(diào)用順序按照它們被繼承時(shí)聲明的順序(從左向右)。調(diào)用成員對(duì)象的構(gòu)造函數(shù),調(diào)用順序按照它們?cè)陬?lèi)中聲明的順序。派生類(lèi)的構(gòu)造函數(shù)體中的內(nèi)容。繼承與派生繼承時(shí)的析構(gòu)函數(shù)析構(gòu)函數(shù)也不被繼承,派生類(lèi)自行定義。定義方法與一般(無(wú)繼承關(guān)系時(shí))類(lèi)的析構(gòu)函數(shù)相同。不需要顯式地調(diào)用基類(lèi)的析構(gòu)函數(shù),系統(tǒng)會(huì)自動(dòng)隱式調(diào)用。析構(gòu)函數(shù)的調(diào)用次序與構(gòu)造函數(shù)相反。繼承與派生派生類(lèi)與基類(lèi)的關(guān)系賦值兼容原則一個(gè)公有繼承的派生類(lèi)的對(duì)象在使用上可以被當(dāng)作基類(lèi)的對(duì)象,反之則禁止。具體表現(xiàn)在:派生類(lèi)的對(duì)象可以被賦值給基類(lèi)對(duì)象。派生類(lèi)的對(duì)象可以初始化基類(lèi)的引用。指向派生類(lèi)及基類(lèi)對(duì)象的指針以public方式繼承時(shí),指向基類(lèi)的指針也可以指向派生類(lèi)。通過(guò)指向基類(lèi)對(duì)象的指針可以指向它的公有派生的對(duì)象,但不能指向私有派生的對(duì)象;這種指針只能訪問(wèn)從基類(lèi)中繼承的公有成員,不能訪問(wèn)派生類(lèi)本身的成員;但不能將一個(gè)派生類(lèi)對(duì)象的指針指向其基類(lèi)對(duì)象。繼承與派生二義性問(wèn)題在多繼承時(shí),基類(lèi)與派生類(lèi)之間,或基類(lèi)之間出現(xiàn)同名成員時(shí),將出現(xiàn)訪問(wèn)時(shí)的二義性(不確定性)——采用虛函數(shù)或支配(同名覆蓋)原則來(lái)解決。當(dāng)派生類(lèi)從多個(gè)基類(lèi)派生,而這些基類(lèi)又從同一個(gè)基類(lèi)派生,則在訪問(wèn)此共同基類(lèi)中的成員時(shí),將產(chǎn)生二義性——采用虛基類(lèi)來(lái)解決。虛基類(lèi)虛基類(lèi)的引入用于有共同基類(lèi)的場(chǎng)合定義以virtual修飾說(shuō)明基類(lèi)例:class
B1:virtual
public
B作用主要用來(lái)解決多繼承時(shí)可能發(fā)生的對(duì)同一基類(lèi)繼承多次而產(chǎn)生的二義性問(wèn)題.為最遠(yuǎn)的派生類(lèi)提供唯一的基類(lèi)成員,而不重復(fù)產(chǎn)生多次拷貝注意:在第一級(jí)繼承時(shí)就要將共同基類(lèi)設(shè)計(jì)為虛基類(lèi)。多態(tài)性多態(tài)性(Polymorphism)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。多態(tài)性是指發(fā)出同樣的消息被不同類(lèi)型的對(duì)象接收時(shí)導(dǎo)致完全不同的行為。多態(tài)的實(shí)現(xiàn):函數(shù)重載運(yùn)算符重載虛函數(shù)多態(tài)性:運(yùn)算符重載運(yùn)算符重載運(yùn)算符重載是對(duì)已有的運(yùn)算符賦予多重含義必要性C++中預(yù)定義的運(yùn)算符其運(yùn)算對(duì)象只能是基本數(shù)據(jù)類(lèi)型,而不適用于用戶(hù)自定義類(lèi)型(如類(lèi))實(shí)現(xiàn)機(jī)制運(yùn)算符重載的實(shí)質(zhì)就是函數(shù)重載:每個(gè)運(yùn)算符對(duì)應(yīng)各自的運(yùn)算符函數(shù),根據(jù)操作數(shù)的不同調(diào)用不同的同名函數(shù)。將指定的運(yùn)算表達(dá)式轉(zhuǎn)化為對(duì)運(yùn)算符函數(shù)的調(diào)用,運(yùn)算對(duì)象轉(zhuǎn)化為運(yùn)算符函數(shù)的實(shí)參。多態(tài)性:運(yùn)算符重載運(yùn)算符重載的規(guī)則和限制編譯系統(tǒng)對(duì)重載運(yùn)算符的選擇,遵循函數(shù)重載的選擇原則??梢灾剌dC++中除下列運(yùn)算符外的所有運(yùn)算符:.
.*
::
?:只能重載C++語(yǔ)言中已有的運(yùn)算符,不可臆造新的。不改變?cè)\(yùn)算符的優(yōu)先級(jí)和結(jié)合性。不能改變操作數(shù)個(gè)數(shù)。經(jīng)重載的運(yùn)算符,其操作數(shù)中至少應(yīng)該有一個(gè)是自定義類(lèi)型。多態(tài)性:運(yùn)算符重載運(yùn)算符重載的兩種形式重載為類(lèi)的成員函數(shù):函數(shù)類(lèi)型operator
運(yùn)算符(形參表){
函數(shù)體
}重載為類(lèi)的友元函數(shù):friend
函數(shù)類(lèi)型operator
運(yùn)算符(形參表){
函數(shù)體
}多態(tài)性:運(yùn)算符重載重載為類(lèi)成員函數(shù)時(shí)參數(shù)個(gè)數(shù)=原操作數(shù)個(gè)數(shù)-1
(后置++、--除外)當(dāng)類(lèi)的對(duì)象調(diào)用這種運(yùn)算符函數(shù)時(shí),對(duì)象中的成員數(shù)據(jù)就可以是一個(gè)操作數(shù),另一個(gè)操作數(shù)才通過(guò)參數(shù)傳遞來(lái)獲得。如:class
complex{publiccomplex
operator
+
(complex
c2);…….
}多態(tài)性:運(yùn)算符重載重載為友元函數(shù)時(shí)參數(shù)個(gè)數(shù)=原操作數(shù)個(gè)數(shù),且至少應(yīng)該有一個(gè)自定義類(lèi)型的形參。友元函數(shù)是類(lèi)以外的函數(shù),調(diào)用這種運(yùn)算符函
數(shù)時(shí),所有的操作數(shù)都要通過(guò)參數(shù)傳遞來(lái)獲得。如:class
complex{publicfriend
complex
operator
+
(complex
c1,complex
c2);…….
}多態(tài)性:運(yùn)算符重載雙目運(yùn)算符B如果要重載B
為類(lèi)成員函數(shù),使之能夠?qū)崿F(xiàn)表達(dá)式oprd1
B
oprd2,其中oprd1
為A
類(lèi)對(duì)象,則B
應(yīng)被重載為A
類(lèi)的成員函數(shù),形參類(lèi)型應(yīng)該是oprd2所屬的類(lèi)型。經(jīng)重載后,表達(dá)式oprd1
B
oprd2
相當(dāng)于oprd1.operator
B(oprd2)多態(tài)性:運(yùn)算符重載范例:將“+”、“-”運(yùn)算重載為復(fù)數(shù)類(lèi)的成員函數(shù)。規(guī)則:實(shí)部和虛部分別相加減。操作數(shù):兩個(gè)操作數(shù)都是復(fù)數(shù)類(lèi)的對(duì)象。多態(tài)性:運(yùn)算符重載復(fù)數(shù)類(lèi)的實(shí)現(xiàn):class
complex{public://復(fù)數(shù)類(lèi)聲明//外部接口complex(double
r=0.0,double
i=0.0){real=r;imag=i;}//構(gòu)造函數(shù)/+重載為成員函數(shù)//-重為載成員函數(shù)//輸出復(fù)數(shù)//私有數(shù)據(jù)成員//復(fù)數(shù)實(shí)部//復(fù)數(shù)虛部complex
operator
+
(complex
c2);complex
operator-
(complex
c2);void
display();private:double
real;double
imag;};多態(tài)性:運(yùn)算符重載重載運(yùn)算符函數(shù)的實(shí)現(xiàn)complex
complex::operator
+(complex
c2){complex
c;c.real=c2.real+real;c.imag=c2.imag+imag;return
complex(c.real,c.imag);}complex
complex::operator
-
(complex
c2){complex
c;c.real=real-c2.real;c.imag=imag-c2.imag;return
complex(c.real,c.imag);}多態(tài)性:運(yùn)算符重載練習(xí):使用前面實(shí)現(xiàn)的復(fù)數(shù)類(lèi)及重載的運(yùn)算符創(chuàng)建一個(gè)基于控制臺(tái)的應(yīng)用程序,接受用戶(hù)輸入的復(fù)數(shù)(分別輸入實(shí)部和虛部),實(shí)現(xiàn)復(fù)數(shù)的加減運(yùn)算。多態(tài)性:運(yùn)算符重載前置單目運(yùn)算符U如果要重載U
為類(lèi)成員函數(shù),使之能夠?qū)?/p>
現(xiàn)表達(dá)式U
oprd,其中oprd
為A類(lèi)對(duì)象,則U
應(yīng)被重載為A
類(lèi)的成員函數(shù),無(wú)形參。經(jīng)重載后,表達(dá)式U
oprd
相當(dāng)于a.operator
U()多態(tài)性:運(yùn)算符重載后置單目運(yùn)算符++和--如果要重載
++或--為類(lèi)成員函數(shù),使之能夠?qū)崿F(xiàn)表達(dá)式oprd++或
oprd--,其中
oprd為A類(lèi)對(duì)象,則
++或--
應(yīng)被重載為A
類(lèi)的成員函數(shù),且具有一個(gè)
int
類(lèi)型形參。經(jīng)重載后,表達(dá)式oprd++
相當(dāng)于oprd.operator
++(0)多態(tài)性:運(yùn)算符重載運(yùn)算符友元函數(shù)的設(shè)計(jì)如果需要重載一個(gè)運(yùn)算符,使之能夠用于操作某類(lèi)對(duì)象的私有成員,可以此將運(yùn)算符重載為該類(lèi)的友元函數(shù)。函數(shù)的形參代表依自左至右次序排列的各操作數(shù)。后置單目運(yùn)算符++和--的重載函數(shù),形參列表中要增加一個(gè)int,但不必寫(xiě)形參名。靜態(tài)聯(lián)編與動(dòng)態(tài)聯(lián)編?kù)o態(tài)聯(lián)編與動(dòng)態(tài)聯(lián)編:由于同名對(duì)象的多態(tài)性,程序在執(zhí)行時(shí)需要確定具體的操作對(duì)象,即具體決定調(diào)用哪個(gè)函數(shù)。這種程序自身彼此關(guān)聯(lián)的過(guò)程,稱(chēng)為聯(lián)編。用來(lái)確定程序中的操作調(diào)用與執(zhí)行該操作的代碼間的關(guān)系。聯(lián)編可以在編譯時(shí)完成,也可在運(yùn)行時(shí)完成,分別稱(chēng)為靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編。多態(tài)性:虛函數(shù)概念:虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ)。是非靜態(tài)的成員函數(shù)。具有繼承性,基類(lèi)中定義了虛函
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度汽車(chē)零部件技術(shù)交易與許可證協(xié)議3篇
- 環(huán)保與經(jīng)濟(jì)雙贏農(nóng)村住房墻材的可持續(xù)發(fā)展路徑
- 二零二五年度餐飲店食品安全監(jiān)督協(xié)議3篇
- 2025年度個(gè)人借款借條設(shè)計(jì)及法律風(fēng)險(xiǎn)防控合同3篇
- 2025年度個(gè)人股權(quán)代持解除條件及補(bǔ)償協(xié)議3篇
- 二零二五年度新能源汽車(chē)零部件銷(xiāo)售協(xié)議3篇
- 智能制造技術(shù)助力醫(yī)療設(shè)備升級(jí)換代
- 2025年度漁船買(mǎi)賣(mài)合同(含漁港租賃權(quán))3篇
- 二零二五年度彩鋼板生產(chǎn)廢棄物處理合同3篇
- 跨領(lǐng)域合作如何有效探索學(xué)生個(gè)性化學(xué)習(xí)路徑
- 辦公設(shè)備(電腦、一體機(jī)、投影機(jī)等)采購(gòu) 投標(biāo)方案(技術(shù)方案)
- 查干淖爾一號(hào)井環(huán)評(píng)
- 案卷評(píng)查培訓(xùn)課件模板
- 體檢中心分析報(bào)告
- 2024年江蘇省樣卷五年級(jí)數(shù)學(xué)上冊(cè)期末試卷及答案
- 波浪理論要點(diǎn)圖解完美版
- 金融交易數(shù)據(jù)分析與風(fēng)險(xiǎn)評(píng)估項(xiàng)目環(huán)境敏感性分析
- 牛頓環(huán)與劈尖實(shí)驗(yàn)論文
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)四 其他平臺(tái)載體的運(yùn)營(yíng)方式
- 浙教版科學(xué)八年級(jí)下冊(cè)全冊(cè)課件
- 2022年中國(guó)止血材料行業(yè)概覽:發(fā)展現(xiàn)狀對(duì)比分析研究報(bào)告(摘要版) -頭豹
評(píng)論
0/150
提交評(píng)論