《譚浩強(qiáng)C程序設(shè)計(jì) n》由會(huì)員分享,可在線閱讀,更多相關(guān)《譚浩強(qiáng)C程序設(shè)計(jì) n(55頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、會(huì)計(jì)學(xué)1譚浩強(qiáng)譚浩強(qiáng)C程序設(shè)計(jì)程序設(shè)計(jì) np動(dòng)態(tài)多態(tài)性:是在程序運(yùn)行過程中才動(dòng)態(tài)地確定操作所針對(duì)的對(duì)象。它又稱運(yùn)行時(shí)的多態(tài)性。動(dòng)態(tài)多態(tài)性是通過虛函數(shù)(virtual function)實(shí)現(xiàn)的。在本章中主要介紹動(dòng)態(tài)多態(tài)性和虛函數(shù)。第2頁/共55頁第3頁/共55頁。(1) 聲明基類Point類 寫出聲明基類Point的部分:#include /聲明類Point /聲明一個(gè)類包括什么?class Pointpublic: Point(float x=0,float y=0);/有默認(rèn)參數(shù)的構(gòu)造函數(shù)第4頁/共55頁第5頁/共55頁第6頁/共55頁第7頁/共55頁第8頁/共55頁第9頁/共55頁第10頁
2、/共55頁第11頁/共55頁第12頁/共55頁第13頁/共55頁。種方法來區(qū)分兩個(gè)同名的函數(shù)。但是這樣做很不方便。第14頁/共55頁問題的。虛函數(shù)的作用是允許在派生類中重新定義與基類同名的函數(shù),并且可以通過基類指針或引用來訪問基類和派生類中的同名函數(shù)。方法:由基類指針,訪問各層次中的同名函數(shù)。例12.2。再討論使用虛函數(shù)的情況。第15頁/共55頁第16頁/共55頁/Student類成員函數(shù)的實(shí)現(xiàn)類成員函數(shù)的實(shí)現(xiàn)Student:Student(int n, string nam,float s) /定義構(gòu)造函定義構(gòu)造函數(shù)數(shù) num=n;name=nam;score=s;void Student:
3、display( ) /定義輸出函數(shù)定義輸出函數(shù)coutnum:numnname:namenscore:scorenn;第17頁/共55頁第18頁/共55頁第19頁/共55頁第20頁/共55頁第21頁/共55頁數(shù)相同,并根據(jù)派生類的需要重新定義函數(shù)體。第22頁/共55頁指針變量,并使它指向同一類族中需要調(diào)用該函數(shù)的對(duì)象。(4) 通過該指針變量調(diào)用此虛函數(shù),此時(shí)調(diào)用的就是指針變量指向的對(duì)象的同名函數(shù)。第23頁/共55頁第24頁/共55頁第25頁/共55頁第26頁/共55頁第27頁/共55頁法確定調(diào)用對(duì)象的。第28頁/共55頁此也稱為滯后關(guān)聯(lián)(late binding)。第29頁/共55頁第30頁
4、/共55頁系統(tǒng)在進(jìn)行動(dòng)態(tài)關(guān)聯(lián)時(shí)的時(shí)間開銷是很少的,因此,多態(tài)性是高效的。第31頁/共55頁第32頁/共55頁第33頁/共55頁第34頁/共55頁第35頁/共55頁第36頁/共55頁析構(gòu)函數(shù),以保證在撤銷動(dòng)態(tài)分配空間時(shí)能得到正確的處理。構(gòu)造函數(shù)不能聲明為虛函數(shù)。這是因?yàn)樵趫?zhí)行構(gòu)造函數(shù)時(shí)類對(duì)象還未完成建立過程,當(dāng)然談不上函數(shù)與類對(duì)象的綁定。第37頁/共55頁一個(gè)是求圓柱體表面積。僅供派生而無實(shí)際意義的函數(shù),故純虛之。第38頁/共55頁在聲明虛函數(shù)時(shí)被“初始化”為0的函數(shù)。聲明純虛函數(shù)的一般形式是virtual 函數(shù)類型 函數(shù)名 (參數(shù)表列) =0;第39頁/共55頁進(jìn)行定義。如果在基類中沒有保留函
5、數(shù)名字,則無法實(shí)現(xiàn)多態(tài)性。如果在一個(gè)類中聲明了純虛函數(shù),而在其派生類中沒有對(duì)該函數(shù)定義,則該虛函數(shù)在派生類中仍然為純虛函數(shù)。第40頁/共55頁第41頁/共55頁以被調(diào)用。這個(gè)派生類就不是抽象類,而是可以用來定義對(duì)象的具體類(concrete class)。如果在派生類中沒有對(duì)所有純虛函數(shù)進(jìn)行定義,則此派生類仍然是抽象類,不能用來定義對(duì)象。第42頁/共55頁第43頁/共55頁閱讀,分段插入了一些文字說明。程序如下: 第44頁/共55頁第45頁/共55頁第46頁/共55頁第47頁/共55頁第48頁/共55頁第49頁/共55頁第50頁/共55頁第51頁/共55頁,把各類中共有的成員函數(shù)集中在抽象基類中聲明。(4) 抽象基類是本類族的公共接口?;蛘哒f,從同一基類派生出的多個(gè)類有同一接口。(5) 區(qū)別靜態(tài)關(guān)聯(lián)和動(dòng)態(tài)關(guān)聯(lián)。第52頁/共55頁不知道類是怎樣聲明的,但是可以使用這些類來派生出自己的類。利用虛函數(shù)和多態(tài)性,程序員的注意力集中在處理普遍性,而讓執(zhí)行環(huán)境處理特殊性。第53頁/共55頁第54頁/共55頁感謝您的觀看!感謝您的觀看!第55頁/共55頁