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