付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
has-A
包含關(guān)系,用以描述一個(gè)類由多個(gè)“部件類”構(gòu)成。一個(gè)類中的數(shù)據(jù)成員是另一種已經(jīng)定義的類對象。如:家庭(Family)有多個(gè)成員(Member)組成uses-A
一個(gè)類使用另一個(gè)類。通過類之間成員函數(shù)的相互聯(lián)系,定義友員或?qū)ο髤?shù)傳遞實(shí)現(xiàn)。如:學(xué)生(student)完成某一任務(wù)(task)is-A
“繼承”機(jī)制-從已有的類基礎(chǔ)上建立新類軟件重用(softwarereusability)如:研究生(postgraduate)是學(xué)生(student)1類之間的關(guān)系2UsesaIsahasaStrongerClassRelationshipWeakerClassRelationship類之間的關(guān)系has-A:C++中此關(guān)系使用成員變量來實(shí)現(xiàn)
唐僧與他的幾個(gè)徒弟的關(guān)系是has-A的關(guān)系
3Has-A關(guān)系分析舉例Has-A關(guān)系分析舉例
class徒弟{…};class唐僧{…private:
徒弟[]徒弟們;…};4Uses-a關(guān)系Uses-A:C++中此關(guān)系使用局部變量或者和函數(shù)的參數(shù)來實(shí)現(xiàn)人購買車時(shí),人與車的關(guān)系是使用關(guān)系
5Uses-a關(guān)系ClassCar{…};ClassPerson{…Public:voidbuy(Car&car){doubleprice=car.getPrice();……}…};6Is–a關(guān)系7C++中此類關(guān)系使用繼承來實(shí)現(xiàn)交通工具“類族”之間的關(guān)系就是繼承關(guān)系類之間的關(guān)系8使用面向?qū)ο蟮恼Z言進(jìn)行程序開發(fā),與面向過程不同,首先應(yīng)確定“類”以及這些類之間的關(guān)系,然后再為每個(gè)類添加“屬性”和“方法”。這是C與C++程序設(shè)計(jì)最大的不同。對象=算法+數(shù)據(jù)結(jié)構(gòu)程序=(對象+對象+對象+…)+消息2-2類的組合(Has-A)91.類的組合的聲明2.類的組合的初始化Student類classDate{public:Date();Date(intd,intm,inty);~Date();voiddisplay();private:intday;intmonth;intyear;};classStudent{public:Student();~Student();voiddisplay();private:intnum;
char*name;
Datebirthday;
};類的復(fù)合(聚集)Student-num:intname:char*sex:char-birthday:Date+print():void+set():void……復(fù)雜數(shù)據(jù)成員任何一個(gè)Student對象都包含有一個(gè)birthday對象,所以,想要構(gòu)造一student,就必須先構(gòu)造一個(gè)birthday成員對象的初始化一個(gè)對象如果有“成員對象”(即它的成員數(shù)據(jù)不是普通類型,而是“類”類型的),那么在實(shí)現(xiàn)構(gòu)造函數(shù)時(shí)應(yīng)對“成員對象”進(jìn)行初始化。方式是在構(gòu)造函數(shù)中增加構(gòu)造參數(shù),指明“成員對象”構(gòu)造的方式若沒有“成員對象”構(gòu)造方式的聲明,系統(tǒng)默認(rèn)調(diào)用“成員對象”的無參的構(gòu)造函數(shù)。Student類的構(gòu)造函數(shù)Student::Student(intno,char*n,chars,inty,intm,intd):birth(y,m,d){ num=no; strcpy(name,n); sex=s;cout<<"StudentConstructorcalled."<<endl;}13142-3類的繼承和多態(tài)1.繼承概述2.基類和派生類3.派生類的構(gòu)造與析構(gòu)4.多繼承與虛基類5.多態(tài)概述6.虛函數(shù)7.純虛函數(shù)與抽象類151.繼承概述繼承16繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征之一,是從已有的類基礎(chǔ)上建立新類的過程。繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)支持代碼重用的重要機(jī)制。面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承機(jī)制提供了無限重復(fù)利用程序資源的一種途徑。通過C++語言中的繼承機(jī)制,一個(gè)新類既可以共享另一個(gè)類的操作和數(shù)據(jù),也可以在新類中定義已有類中沒有的成員,這樣就能大大的節(jié)省程序開發(fā)的時(shí)間和資源。1.繼承概述17class派生類名:繼承方式基類名{
數(shù)據(jù)成員和成員函數(shù)聲明;}1.繼承概述18繼承是類之間定義的一種重要關(guān)系稱已存在的用來派生新類的類為基類,又稱為父類由已存在的類派生出的新類稱為派生類,又稱為子類。派生類可以具有基類的特性,共享基類的成員函數(shù),使用基類的數(shù)據(jù)成員,還可以定義自己的新特性,定義自己的數(shù)據(jù)成員和成員函數(shù)。classB:classAAdata;Afunction;B_Data;B_Fuction;1.繼承概述192.基類和派生類不同繼承方式的影響主要體現(xiàn)在:派生類成員對基類成員的訪問權(quán)限派生類對象對基類成員的訪問權(quán)限三種繼承方式公有繼承私有繼承保護(hù)繼承20
派生類對基類成員的使用,與繼承訪問控制和基類中成員性質(zhì)有關(guān)公有繼承
基類的公有成員派生類的公有成員基類的保護(hù)成員派生類的保護(hù)成員私有繼承
基類的公有成員和保護(hù)成員派生類的私有成員保護(hù)繼承
基類的公有成員和保護(hù)成員派生類的保護(hù)成員不論哪種方式繼承基類,派生類都不能直接使用基類的私有成員默認(rèn)繼承方式2.基類和派生類21基類中訪問方式派生類繼承方式派生類中訪問基類成員publicpublicpublicprotectedpublicprotectedprivatepublic---publicprotectedprotectedprotectedprotectedprotectedprivateprotected---publicprivateprivateprotectedprivateprivateprivateprivate---2.基類和派生類221.派生類不能訪問基類私有成員2.定義與派生類同名的成員
如果派生類定義了與基類同名的成員,稱派生類的成員覆蓋了基類的同名成員,若要在派生類中使用基類同名成員,可以顯式地使用類名限定符:3.派生類中的靜態(tài)成員
不管公有派生類還是私有派生類,都不影響派生類對基類的靜態(tài)成員的訪問,派生類對基類靜態(tài)成員必須顯式使用形式:類名::成員類名::成員2.基類和派生類23復(fù)制兼容規(guī)則在公有派生的情況下,一個(gè)派生類的對象可用于基類對象適用的地方。賦值兼容規(guī)則有三種情況:(1)派生類的對象可以賦值給基類的對象。
base_Obj=derived_Obj;(2)派生類的對象可以初始化基類的引用。
base&base_Obj=derived_obj;(3)派生類的對象的地址可以賦給指向基類的指針。
base*pBase=&derived_obj;2.基類和派生類243.派生類的構(gòu)造與析構(gòu)
構(gòu)造函數(shù)與析構(gòu)函數(shù)不被繼承C++提供一種機(jī)制,在創(chuàng)建派生類對象時(shí)調(diào)用基類的構(gòu)造函數(shù)來初始化基類數(shù)據(jù)。執(zhí)行派生類的析構(gòu)函數(shù)時(shí),基類的析構(gòu)函數(shù)也將被調(diào)用。
構(gòu)造函數(shù)執(zhí)行順序:基類
派生類
析購函數(shù)執(zhí)行順序:與構(gòu)造函數(shù)相反25構(gòu)造函數(shù)執(zhí)行順序:基類派生類中對象成員
派生類先祖先,再客人,后自己按照類聲明的順序執(zhí)行各自的構(gòu)造函數(shù)派生類構(gòu)造函數(shù)聲明:派生類構(gòu)造函數(shù)(變元表):基類(變元表),…,對象成員n(變元表);3.派生類的構(gòu)造與析構(gòu)26
一個(gè)類有多個(gè)直接基類的繼承關(guān)系稱為多繼承
多繼承聲明語法
class派生類名
:訪問控制基類名1,…,訪問控制基類名n{
數(shù)據(jù)成員和成員函數(shù)聲明
};4.多繼承27classC:publicA,publicBclassAclassB類C可以根據(jù)訪問控制同時(shí)繼承類A和類B的成員,并添加自己的成員4.多繼承281。同名成員的二義性不同基類中有同名函數(shù),使用基類名可避免這種二義:
基類與派生類同名函數(shù)
這種用基類名來控制成員訪問的規(guī)則稱為支配原則。
voidC::f(){A::f();//B::f();}obj.A::f();obj.B::f();obj.g();//隱含用C的g()obj.B::g();//用B的g()4.多繼承292。同一基類被多次繼承產(chǎn)生的二義性
一個(gè)類不能從同一類直接繼承二次或更多次。 當(dāng)一個(gè)派生類是從多個(gè)基類中派生而出的,而這些派生類又有一個(gè)公共的基類的時(shí)候,有可能會出現(xiàn)訪問的二義性。classC:publicB1,publicB2classB1classB2classB4.多繼承30例如:classB{public:intb;};classB1:publicB{intb1;};classB2:publicB{intb2;};classC:publicB1,publicB2{public:intf();private:intd;};有:Cc;c.B::b;
//error,從哪里繼承的?
classC{f(),d}classB1{b1}classB2{b2}classBclassBc.B1::bc.B2::b4.多繼承31例如:classB{public:intb;};classB1:publicB{intb1;};classB2:publicB{intb2;};classC:publicB1,publicB2{public:intf();private:intd;};classC{f(),d}classB1{b1}classB2{b2}classBclassBc.bc.b1c.bc.b2c.dBBB1B2C多重派生類C的對象的存儲結(jié)構(gòu)示意建立C類的對象時(shí),B的構(gòu)造函數(shù)將被調(diào)用兩次:分別由B1和B2調(diào)用,所以初始化C類的對象中包含的兩個(gè)B類的子對象4.多繼承32
如果一個(gè)派生類從多個(gè)基類派生,而這些基類又有一個(gè)共同的基類,則在對該基類中聲明的名字進(jìn)行訪問時(shí),可能產(chǎn)生二義性
如果在多條繼承路徑上有一個(gè)公共的基類,那么在繼承路徑的某處匯合點(diǎn),這個(gè)公共基類就會在派生類的對象中產(chǎn)生多個(gè)基類子對象
要使這個(gè)公共基類在派生類中只產(chǎn)生一個(gè)子對象,必須將這個(gè)基類聲明為虛基類。
虛基類聲明使用關(guān)鍵字 virtual4.多繼承33由于派生類的對象中只有一個(gè)虛基類子對象。為保證虛基類子對象只被初始化一次,這個(gè)虛基類構(gòu)造函數(shù)必須只被調(diào)用一次。規(guī)定將在建立對象時(shí)所指定的類稱為最直接派生類。虛基類子對象是由最直接派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進(jìn)行初始化的。從虛基類直接或間接繼承的派生類中的構(gòu)造函數(shù)的成員初始化列表中都要列出這個(gè)虛基類構(gòu)造函數(shù)的調(diào)用。但是,只有用于建立對象的那個(gè)派生類的構(gòu)造函數(shù)調(diào)用虛基類的構(gòu)造函數(shù),而該派生類的基類中所列出的對這個(gè)虛基類的構(gòu)造函數(shù)調(diào)用在執(zhí)行中被忽略。4.多繼承多態(tài)性的兩種描述:(1)指具有不同功能的函數(shù)可以用同一個(gè)函數(shù)名。(2)指向不同的對象發(fā)送同一個(gè)消息,不同的對象在接收時(shí)會產(chǎn)生不同的行為。5.多態(tài)概述355.多態(tài)概述實(shí)現(xiàn)多態(tài)基礎(chǔ):復(fù)制兼容規(guī)則調(diào)用虛函數(shù)36在類的繼承層次結(jié)構(gòu)中,在不同的層次中可以出現(xiàn)名字相同、參數(shù)個(gè)數(shù)和類型都相同而功能不同的函數(shù)?;愔羔槪ɑ蛞茫┛梢砸米宇悓ο蟆Mㄟ^基類指針(或基類引用)來引用子類對象是實(shí)現(xiàn)多態(tài)的兩種手段虛函數(shù)就是冠以virtual關(guān)鍵詞的類的非靜態(tài)成員函數(shù)虛函數(shù)的作用就是允許在派生類中重新定義與基類同名的函數(shù),并且可以通過基類指針或引用來訪問基類和派生類中的同名函數(shù)。6.虛函數(shù)37如下聲明的非靜態(tài)成員函數(shù):virtual函數(shù)類型函數(shù)名(形參表){
函數(shù)體}6.虛函數(shù)38虛析構(gòu)函數(shù)當(dāng)派生類的對象從內(nèi)存中撤銷時(shí)一般先調(diào)用派生類的析構(gòu)函數(shù),然后再調(diào)用基類的析構(gòu)函數(shù)。但是,如果用new運(yùn)算符建立了臨時(shí)派生類對象,并且定義了一個(gè)指向該基類的指針變量,指向該派生類對象。在程序用帶指針參數(shù)的delete運(yùn)算符撤銷對象時(shí),會發(fā)生一個(gè)情況:系統(tǒng)會只執(zhí)行基類的析構(gòu)函數(shù),而不執(zhí)行派生類的析構(gòu)函數(shù)。6.虛函數(shù)397.純虛函數(shù)與抽象類有時(shí)在基類中將某一成員函數(shù)定為虛函數(shù),并不是基類本身的要求,而是考慮到派生類的需要,在基類中預(yù)留了一個(gè)函數(shù)名,具體功能留給派生類根據(jù)需要去定義。例如,按理說基類Point中應(yīng)該沒有求面積的area函數(shù),因?yàn)椤包c(diǎn)”是沒有面積的,也就是說,基類本身不需要這個(gè)函數(shù),所以Point類中應(yīng)該不定義area函數(shù)。但是,在其直接派生類Circle和間接派生類Cylinder中都需要有area函數(shù),而且這兩個(gè)area函數(shù)的功能不同,一個(gè)是求圓面積,一個(gè)是求圓柱體表面積。也許大家認(rèn)為,可以在基類Point中加一個(gè)area函數(shù),并聲明為虛函數(shù): virtualfloatarea()const{return0;}其實(shí),在基類中并不使用這個(gè)函數(shù),其返回值也是沒有意義的。為簡化,可以不寫出這種無意義的函數(shù)體,只給出函數(shù)的原型,并在后面加上“=0”,如: virtualfloatarea()const=0;//純虛函數(shù)7.純虛函數(shù)與抽象類41在許多情況下,在基
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨裝值班員操作規(guī)程知識考核試卷含答案
- 有色礦石磨細(xì)工安全宣教知識考核試卷含答案
- 飼料配方師班組管理考核試卷含答案
- 會展服務(wù)師安全生產(chǎn)意識強(qiáng)化考核試卷含答案
- 高爐上料工安全宣貫測試考核試卷含答案
- 重冶固體原料輸送工安全專項(xiàng)評優(yōu)考核試卷含答案
- 輕冶沉降工復(fù)試競賽考核試卷含答案
- 2024年山東省濟(jì)寧教育學(xué)院輔導(dǎo)員考試參考題庫附答案
- 粉末冶金制品制造工崗前理論能力考核試卷含答案
- 催化劑制造工安全文化能力考核試卷含答案
- 業(yè)務(wù)協(xié)同考核管理辦法
- 操盤手勞動合同附加協(xié)議
- 2025年中學(xué)生守則及中學(xué)生日常行為規(guī)范
- 理解當(dāng)代中國 大學(xué)英語綜合教程1(拓展版)課件 B1U3 Into the green
- 醫(yī)藥展會活動方案
- 【庫潤數(shù)據(jù)】2025口服抗衰消費(fèi)者趨勢洞察報(bào)告
- 快遞車輛運(yùn)輸管理辦法
- 麻醉術(shù)后健康教育
- 《COUNS門禁CU-K05使用說明書》
- 麻醉蘇醒期并發(fā)癥及處理
- tpm自主設(shè)備管理制度
評論
0/150
提交評論