版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)第5章 多態(tài)與抽象類10/16/20221第5章多態(tài)與抽象類面向?qū)ο蟪绦蛟O(shè)計(jì)第5章 多態(tài)與抽象類10/11/202 內(nèi)容提要5.1 類層次的多態(tài)問題5.2 類型兼容規(guī)則(重點(diǎn))5.3 多態(tài)的概念5.4 多態(tài)的分類5.5 聯(lián)編5.6 虛函數(shù)(重點(diǎn))5.7 抽象類與純虛函數(shù)(重點(diǎn))10/16/20222第5章多態(tài)與抽象類 內(nèi)容提要5.1 類層次的多態(tài)問題10/11/20222提出問題【例5-1】在例4-1程序中存在的兩個(gè)不足:(1)基類Pay()和Display()的函數(shù)體均為空,在實(shí)現(xiàn)部分仍要寫出函數(shù)體,顯得冗余。(2)在主函數(shù)中,建立了4個(gè)不同類的對象,進(jìn)行了類似的操作,重復(fù)寫
2、了4遍類似的語句,程序不夠簡潔。10/16/20223第5章多態(tài)與抽象類提出問題【例5-1】在例4-1程序中存在的兩個(gè)不足:10/1分析問題基類設(shè)置成員函數(shù)Pay()和Display()的目的是為了統(tǒng)一規(guī)定類簇的基本行為,雖有冗余,但也必要。為此,C+提供了純虛函數(shù)來解決此問題。 10/16/20224第5章多態(tài)與抽象類分析問題基類設(shè)置成員函數(shù)Pay()和Display()的目的在主函數(shù)中建立了4個(gè)不同類的對象,進(jìn)行了類似的操作,重復(fù)寫了4遍類似的語句。應(yīng)該怎樣有效地來處理它們同樣的行為呢?我們首先想到的是用循環(huán)解決,但調(diào)用這些同名函數(shù)的對象卻不相同。分析這些對象有一個(gè)共同點(diǎn),那就是來自于同一
3、個(gè)基類,而基類與派生類對象有什么關(guān)系呢?事實(shí)上,它們遵循類型兼容規(guī)則。10/16/20225第5章多態(tài)與抽象類在主函數(shù)中建立了4個(gè)不同類的對象,進(jìn)行了類似的操作,重復(fù)寫了Employee *emp4=&m1,&t1,&s1,&sm1; /聲明抽象類指針數(shù)組for(int i=0;iPay(); /單一指令,實(shí)現(xiàn)多態(tài),計(jì)算指針指向?qū)ο蟮墓べYempi-Display();/單一指令,實(shí)現(xiàn)多態(tài),輸出指針指向?qū)ο蟮男畔?0/16/20226第5章多態(tài)與抽象類Employee *emp4=&m1,&t1,&s1,5.2類型兼容規(guī)則類型兼容規(guī)則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代
4、。10/16/20227第5章多態(tài)與抽象類5.2類型兼容規(guī)則類型兼容規(guī)則是指在需要基類對象的任何地方,通過公有繼承,派生類得到了基類中除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的所有成員。這樣,公有派生類實(shí)際就具備了基類的所有功能,凡是基類能解決的問題,公有派生類都可以解決。 10/16/20228第5章多態(tài)與抽象類通過公有繼承,派生類得到了基類中除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的所類型兼容規(guī)則中所指替代包括以下情況:(1)派生類的對象可以賦值給基類的對象。(2)派生類的對象可以初始化基類的引用。(3)派生類的對象的地址可以賦值給基類的指針變量。在替代之后,派生類對象就可以作為基類的對象使用,但只能訪問從基類繼承的成員
5、。10/16/20229第5章多態(tài)與抽象類類型兼容規(guī)則中所指替代包括以下情況:10/11/20229第【例5-3】示例類型兼容規(guī)則的應(yīng)用。教材P261,該程序的運(yùn)行結(jié)果為:Base classBase classBase classDerivel classDerive2 class 10/16/202210第5章多態(tài)與抽象類【例5-3】示例類型兼容規(guī)則的應(yīng)用。10/11/202210根據(jù)類型兼容規(guī)則,基類指針p可以指向派生類對象obj2、obj3(即派生類對象可以代替基類對象,給基類指針賦值),但編譯時(shí),編譯器根據(jù)p的類型是基類型,自動(dòng)調(diào)用基類的who(),所以結(jié)果如上所示。 10/16/2
6、02211第5章多態(tài)與抽象類根據(jù)類型兼容規(guī)則,基類指針p可以指向派生類對象obj2、ob【思考題5-3】如果基類指針要訪問派生類的who(),怎么辦? C+提供了多態(tài)機(jī)制來解決這個(gè)問題。類型兼容規(guī)則是C+多態(tài)的重要基礎(chǔ)。 10/16/202212第5章多態(tài)與抽象類【思考題5-3】如果基類指針要訪問派生類的who(),怎么辦多態(tài)多態(tài)(Polymorphism)是指具有相似功能的不同函數(shù)使用同一個(gè)名稱來實(shí)現(xiàn),從而可以使用相同的調(diào)用方式來調(diào)用這些具有不同功能的同名函數(shù)的特性。 10/16/202213第5章多態(tài)與抽象類多態(tài)多態(tài)(Polymorphism)是指具有相似功能的不同函5.4 多態(tài)的分類C+
7、支持的多態(tài)可以分為四種類型:重載多態(tài):函數(shù)重載和運(yùn)算符重載強(qiáng)制多態(tài):強(qiáng)制類型轉(zhuǎn)換包含多態(tài):虛函數(shù)參數(shù)多態(tài):函數(shù)模板和類模板 10/16/202214第5章多態(tài)與抽象類5.4 多態(tài)的分類C+支持的多態(tài)可以分為四種類型:10/聯(lián)編聯(lián)編是指把一個(gè)標(biāo)識符名和一個(gè)存儲(chǔ)地址聯(lián)系在一起的過程。即函數(shù)調(diào)用與某個(gè)函數(shù)在多態(tài)的實(shí)現(xiàn)過程中,確定調(diào)用哪個(gè)同名聯(lián)系的過程,又稱綁定。分為:靜態(tài)聯(lián)編動(dòng)態(tài)聯(lián)編10/16/202215第5章多態(tài)與抽象類聯(lián)編聯(lián)編是指把一個(gè)標(biāo)識符名和一個(gè)存儲(chǔ)地址聯(lián)系在一起的過程。即靜態(tài)聯(lián)編是在編譯階段完成的聯(lián)編。例5-2、例5-3及以前的函數(shù)重載都是采用靜態(tài)聯(lián)編方式。例5-4,教材P265,是靜態(tài)
8、聯(lián)編。動(dòng)態(tài)聯(lián)編是在運(yùn)行階段完成的聯(lián)編。 10/16/202216第5章多態(tài)與抽象類靜態(tài)聯(lián)編是在編譯階段完成的聯(lián)編。例5-2、例5-3及以前的函在例5-4中,靜態(tài)聯(lián)編把基類指針ps指向的對象綁定到基類上,而在運(yùn)行時(shí)進(jìn)行動(dòng)態(tài)聯(lián)編將把ps指向的對象綁定到派生類上。10/16/202217第5章多態(tài)與抽象類在例5-4中,靜態(tài)聯(lián)編把基類指針ps指向的對象綁定到基類上,可見,同一個(gè)指針,在不同階段被綁定的類對象將是不同的,進(jìn)而被關(guān)聯(lián)的類成員函數(shù)也是不同的。如何來確定是用靜態(tài)聯(lián)編還是用動(dòng)態(tài)聯(lián)編呢?C+規(guī)定,動(dòng)態(tài)聯(lián)編通過繼承和虛函數(shù)來實(shí)現(xiàn)。10/16/202218第5章多態(tài)與抽象類可見,同一個(gè)指針,在不同階段
9、被綁定的類對象將是不同的,進(jìn)而被虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ)。下面介紹虛函數(shù)。10/16/202219第5章多態(tài)與抽象類虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ)。下面介紹虛函數(shù)。10/11/20225.6 虛函數(shù)虛函數(shù)就是在基類中被關(guān)鍵字virtual說明、并在一個(gè)或多個(gè)派生類中被重新定義的成員函數(shù)。10/16/202220第5章多態(tài)與抽象類5.6 虛函數(shù)虛函數(shù)就是在基類中被關(guān)鍵字virtual說明、聲明虛函數(shù)的格式如下:virtual ();10/16/202221第5章多態(tài)與抽象類聲明虛函數(shù)的格式如下:10/11/202221第5章多態(tài)與抽在派生類中重新定義虛函數(shù)時(shí),其函數(shù)原型包括返回類型、函數(shù)名、參數(shù)個(gè)數(shù)與參數(shù)
10、類型的順序,都必須與基類中的原型必須相同。10/16/202222第5章多態(tài)與抽象類在派生類中重新定義虛函數(shù)時(shí),其函數(shù)原型包括返回類型、函數(shù)名、一個(gè)函數(shù)一旦被聲明為虛函數(shù),則無論聲明它的類被繼承了多少層,在每一層派生類中該函數(shù)都保持虛函數(shù)特性。因此,在派生類中重新定義該函數(shù)時(shí),可以省略關(guān)鍵字virtual。但是,為了提高程序的可讀性,往往不省略。10/16/202223第5章多態(tài)與抽象類一個(gè)函數(shù)一旦被聲明為虛函數(shù),則無論聲明它的類被繼承了多少層,在程序運(yùn)行時(shí),不同類的對象調(diào)用各自的虛函數(shù),這就是運(yùn)行時(shí)多態(tài)。10/16/202224第5章多態(tài)與抽象類在程序運(yùn)行時(shí),不同類的對象調(diào)用各自的虛函數(shù),這
11、就是運(yùn)行時(shí)多態(tài)【例5-5】將例5-4基類的成員函數(shù)print()設(shè)為虛函數(shù),采用對象指針調(diào)用虛函數(shù),進(jìn)而實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。 10/16/202225第5章多態(tài)與抽象類【例5-5】將例5-4基類的成員函數(shù)print()設(shè)為虛函數(shù)該程序的運(yùn)行結(jié)果為:A studentA graduate studentA studentA studentA graduate student10/16/202226第5章多態(tài)與抽象類該程序的運(yùn)行結(jié)果為:10/11/202226第5章多態(tài)與抽象【思考題5-5】如果將例5-5中Student類改為:class Studentpublic: virtual void prin
12、t(); /虛函數(shù)的聲明;virtual void Student:print() /虛函數(shù)的實(shí)現(xiàn) coutA studentendl;10/16/202227第5章多態(tài)與抽象類【思考題5-5】如果將例5-5中Student類改為:10/注意:當(dāng)有虛函數(shù)聲明時(shí),virtual關(guān)鍵字只用在虛函數(shù)的聲明中,不能用在虛函數(shù)定義中。 10/16/202228第5章多態(tài)與抽象類注意:當(dāng)有虛函數(shù)聲明時(shí),virtual關(guān)鍵字只用在虛函數(shù)的聲【思考題5-4】將例5-5中用對象調(diào)用虛函數(shù),其結(jié)果如何?【注意】只有通過對象指針或?qū)ο笠脕碚{(diào)用虛函數(shù),才能實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。如果采用對象來調(diào)用虛函數(shù),則采用的是靜態(tài)聯(lián)編方
13、式。10/16/202229第5章多態(tài)與抽象類【思考題5-4】將例5-5中用對象調(diào)用虛函數(shù),其結(jié)果如何?1【例5-6】將例5-4基類的成員函數(shù)print()設(shè)為虛函數(shù),采用對象引用調(diào)用虛函數(shù),進(jìn)而實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。 10/16/202230第5章多態(tài)與抽象類【例5-6】將例5-4基類的成員函數(shù)print()設(shè)為虛函數(shù)運(yùn)行結(jié)果表明,只要定義一個(gè)基類的對象指針或?qū)ο笠茫涂梢哉{(diào)用期望的虛函數(shù)。思考題:如果將對象引用或?qū)ο笾羔槗Q為對象,那么是靜態(tài)聯(lián)編。10/16/202231第5章多態(tài)與抽象類運(yùn)行結(jié)果表明,只要定義一個(gè)基類的對象指針或?qū)ο笠茫涂梢哉{(diào)在實(shí)際應(yīng)用中,編程人員不必過多地考慮類的層次關(guān)系,
14、無須顯式地寫出虛函數(shù)的路徑,只須將對象指針指向相應(yīng)的派生類或引用相應(yīng)的對象,通過動(dòng)態(tài)聯(lián)編就可以對消息做出正確的反應(yīng)。10/16/202232第5章多態(tài)與抽象類在實(shí)際應(yīng)用中,編程人員不必過多地考慮類的層次關(guān)系,無須顯式地小結(jié)(1)如果你期望在派生類中重新定義一個(gè)成員函數(shù),那么你就應(yīng)該在基類中把該函數(shù)設(shè)為virtual。(2)以單一指令調(diào)用不同函數(shù),這種性質(zhì)就是多態(tài)。(3)虛函數(shù)是C+語言的多態(tài)性質(zhì)和動(dòng)態(tài)綁定的關(guān)鍵。(4)虛函數(shù)派生下去仍是虛函數(shù),而且可以省略virtual關(guān)鍵詞。10/16/202233第5章多態(tài)與抽象類小結(jié)(1)如果你期望在派生類中重新定義一個(gè)成員函數(shù),那么你就【思考題5-8】
15、虛函數(shù)與虛擬繼承有什么相似的地方?他們之間有沒有聯(lián)系?如果能了解C+編譯器對于虛函數(shù)的實(shí)現(xiàn)形式,我們就能知道為什么虛函數(shù)可以實(shí)現(xiàn)動(dòng)態(tài)綁定。下面介紹虛函數(shù)表。10/16/202234第5章多態(tài)與抽象類【思考題5-8】虛函數(shù)與虛擬繼承有什么相似的地方?他們之間有5.6.3 虛函數(shù)表為了達(dá)到動(dòng)態(tài)綁定的目的,C+編譯器通過某個(gè)表格,在執(zhí)行期間“間接”調(diào)用實(shí)際上欲綁定的函數(shù),這樣的表格稱為虛函數(shù)表(vtable)。10/16/202235第5章多態(tài)與抽象類5.6.3 虛函數(shù)表為了達(dá)到動(dòng)態(tài)綁定的目的,C+編譯器通每一個(gè)含有虛函數(shù)的類,編譯器都為它做一個(gè)虛函數(shù)表,表中的每一項(xiàng)都指向一個(gè)虛函數(shù)的地址,實(shí)現(xiàn)上是
16、一個(gè)函數(shù)指針的數(shù)組。此外,編譯器也會(huì)為類加上一個(gè)數(shù)據(jù)成員,是一個(gè)指向該虛函數(shù)表的指針(vptr)。 10/16/202236第5章多態(tài)與抽象類每一個(gè)含有虛函數(shù)的類,編譯器都為它做一個(gè)虛函數(shù)表,表中的每一Wind objectvptrStringed objectvptrPercussion objectvptr&Wind:play()& Percussion:play()& Stringed:play()10/16/202237第5章多態(tài)與抽象類Wind objectvptrStringed object當(dāng)通過對象調(diào)用虛函數(shù)時(shí),是通過vptr找到虛函數(shù)表,再找出虛函數(shù)的真正地址。至于基類指針或
17、引用指向派生類對象時(shí),調(diào)用的是派生類虛函數(shù),其奧妙在于虛函數(shù)表以及一種間接調(diào)用方式:10/16/202238第5章多態(tài)與抽象類當(dāng)通過對象調(diào)用虛函數(shù)時(shí),是通過vptr找到虛函數(shù)表,再找出虛虛函數(shù)表中的內(nèi)容依據(jù)類中的虛函數(shù)聲明次序,一一填入函數(shù)指針。派生類會(huì)繼承基類的虛函數(shù)表(以及其它所有可以繼承的成員),我們在派生類中改寫虛函數(shù)時(shí),虛函數(shù)表也受到了影響,表中每一項(xiàng)所指向函數(shù)地址將不再是基類中的函數(shù)地址,而是派生類的函數(shù)地址。10/16/202239第5章多態(tài)與抽象類虛函數(shù)表中的內(nèi)容依據(jù)類中的虛函數(shù)聲明次序,一一填入函數(shù)指針。因此,一個(gè)指向Student對象的指針,所調(diào)用的print函數(shù)就是Stu
18、dent:print(), 而一個(gè)指向GStudent對象的指針,所調(diào)用的print函數(shù)就是GStudent:print()。 10/16/202240第5章多態(tài)與抽象類因此,一個(gè)指向Student對象的指針,所調(diào)用的print函將一個(gè)類的成員函數(shù)定義為虛函數(shù)有利于編程,盡管它會(huì)引起一些額外的開銷。那么,是否所有成員函數(shù)都可以聲明為虛函數(shù)呢?10/16/202241第5章多態(tài)與抽象類將一個(gè)類的成員函數(shù)定義為虛函數(shù)有利于編程,盡管它會(huì)引起一些額一般來說,可將類簇中具有共性的成員函數(shù)聲明為虛函數(shù),而具有個(gè)性的函數(shù)沒有必要聲明為虛函數(shù)。但是下面的情況例外:10/16/202242第5章多態(tài)與抽象類一
19、般來說,可將類簇中具有共性的成員函數(shù)聲明為虛函數(shù),而具有個(gè)(1)靜態(tài)成員函數(shù)不能聲明為虛函數(shù)。因?yàn)殪o態(tài)成員函數(shù)不屬于某一個(gè)對象,沒有多態(tài)性的特征。(2)構(gòu)造函數(shù)不能是虛函數(shù)。構(gòu)造函數(shù)是在定義對象時(shí)被調(diào)用,完成對象的初始化,此時(shí)對象還沒有完全建立。虛函數(shù)作為運(yùn)行時(shí)的多態(tài)性的基礎(chǔ),主要是針對對象的,而構(gòu)造函數(shù)是在對象產(chǎn)生之前運(yùn)行的。所以,將構(gòu)造函數(shù)聲明為虛函數(shù)是沒有意義的。 10/16/202243第5章多態(tài)與抽象類(1)靜態(tài)成員函數(shù)不能聲明為虛函數(shù)。因?yàn)殪o態(tài)成員函數(shù)不屬于某(3)內(nèi)聯(lián)成員函數(shù)不能聲明為虛函數(shù)。因?yàn)閮?nèi)聯(lián)函數(shù)的執(zhí)行代碼是明確的,在編譯時(shí)已被替換,沒有多態(tài)性的特征。如果將那些在類聲明時(shí)
20、就定義內(nèi)容的成員函數(shù)聲明為虛函數(shù),此時(shí)函數(shù)不是內(nèi)聯(lián)函數(shù),而以多態(tài)性出現(xiàn)。10/16/202244第5章多態(tài)與抽象類(3)內(nèi)聯(lián)成員函數(shù)不能聲明為虛函數(shù)。因?yàn)閮?nèi)聯(lián)函數(shù)的執(zhí)行代碼是(4)析構(gòu)函數(shù)可以是虛函數(shù),且往往被定義為虛函數(shù)。一般來說,若某類中有虛函數(shù),則其析構(gòu)函數(shù)也應(yīng)當(dāng)定義為虛函數(shù)。10/16/202245第5章多態(tài)與抽象類(4)析構(gòu)函數(shù)可以是虛函數(shù),且往往被定義為虛函數(shù)。一般來說,特別是需要析構(gòu)函數(shù)完成一些有意義的操作,如釋放內(nèi)存時(shí),由于實(shí)施多態(tài)性時(shí)是通過將基類的指針指向派生類的對象來完成的,如果刪除該指針,就會(huì)調(diào)用該指針指向的派生類的析構(gòu)函數(shù),而派生類的析構(gòu)函數(shù)又自動(dòng)調(diào)用基類的析構(gòu)函數(shù),這
21、樣整個(gè)派生類的對象才被完全釋放。10/16/202246第5章多態(tài)與抽象類特別是需要析構(gòu)函數(shù)完成一些有意義的操作,如釋放內(nèi)存時(shí),由于實(shí)因此,析構(gòu)函數(shù)常被聲明為虛函數(shù)。如果一個(gè)類的析構(gòu)函數(shù)是虛函數(shù),那么,由它派生的所有子類的析構(gòu)函數(shù)也是虛函數(shù)。下面介紹虛析構(gòu)函數(shù)。10/16/202247第5章多態(tài)與抽象類因此,析構(gòu)函數(shù)常被聲明為虛函數(shù)。如果一個(gè)類的析構(gòu)函數(shù)是虛函數(shù)5.6.4 虛析構(gòu)函數(shù)虛析構(gòu)函數(shù)的聲明格式如下:virtual ();【例5-7】虛析構(gòu)函數(shù)示例。教材P27210/16/202248第5章多態(tài)與抽象類5.6.4 虛析構(gòu)函數(shù)虛析構(gòu)函數(shù)的聲明格式如下:10/11/利用虛函數(shù)可以使所設(shè)計(jì)的
22、軟件系統(tǒng)變得靈活,提高了代碼的可重用性。虛函數(shù)為一個(gè)類簇中所有派生類的同一行為提供了統(tǒng)一的接口,使得程序員在使用一個(gè)類簇時(shí)只須記住一個(gè)接口即可。10/16/202249第5章多態(tài)與抽象類利用虛函數(shù)可以使所設(shè)計(jì)的軟件系統(tǒng)變得靈活,提高了代碼的可重用注意事項(xiàng)(1)如果在派生類中沒有重新定義虛函數(shù),則派生類的對象將使用基類的虛函數(shù)代碼。(2)在派生類中重新定義虛函數(shù)時(shí),必須保證函數(shù)值類型和參數(shù)與基類中的聲明完全一致。否則,派生類的函數(shù)也不具備多態(tài)性。10/16/202250第5章多態(tài)與抽象類注意事項(xiàng)(1)如果在派生類中沒有重新定義虛函數(shù),則派生類的對根據(jù)上述介紹,我們可以將例5-1的Pay()和Di
23、splay()定義為虛函數(shù),從而解決例4-1遺留下來的第二個(gè)問題。10/16/202251第5章多態(tài)與抽象類根據(jù)上述介紹,我們可以將例5-1的Pay()和Display另外,公司的人員有4類,它們的基類Employee實(shí)際上是不需要實(shí)例化對象的,Employee也無法為虛函數(shù)定義具體的實(shí)現(xiàn),這時(shí)可以將Employee聲明為純虛函數(shù)。包含純虛函數(shù)的類稱為抽象類。10/16/202252第5章多態(tài)與抽象類另外,公司的人員有4類,它們的基類Employee實(shí)際上是不5.7 抽象類和純虛函數(shù)抽象類專門作為基類派生新類。抽象類的主要作用是將有關(guān)的派生類組織在一個(gè)繼承層次結(jié)構(gòu)中,由抽象類為它們提供一個(gè)公共
24、的根,相關(guān)的派生類就從這個(gè)根派生出來。 含有純虛函數(shù)的類就是抽象類。 10/16/202253第5章多態(tài)與抽象類5.7 抽象類和純虛函數(shù)抽象類專門作為基類派生新類。抽象類在例4-1中遺留的另一個(gè)問題是: employee類的成員函數(shù)pay()和display()的函數(shù)體為空,在實(shí)現(xiàn)部分仍要寫出函數(shù)體,顯得冗余。事實(shí)上,employee類的成員函數(shù)根本不會(huì)被調(diào)用,所以不必定義它。于是+提供了純虛函數(shù)來解決這個(gè)問題。 10/16/202254第5章多態(tài)與抽象類在例4-1中遺留的另一個(gè)問題是: employee類的成員函純虛函數(shù)純虛函數(shù)是為了解決在基類中無法實(shí)現(xiàn)的函數(shù),而在派生類中再給出函數(shù)的具體實(shí)
25、現(xiàn),它只需要在基類中說明函數(shù)原型用來規(guī)定整個(gè)類簇的統(tǒng)一接口形式。10/16/202255第5章多態(tài)與抽象類純虛函數(shù)純虛函數(shù)是為了解決在基類中無法實(shí)現(xiàn)的函數(shù),而在派生類純虛函數(shù)的聲明格式為:virtual ()=0;10/16/202256第5章多態(tài)與抽象類純虛函數(shù)的聲明格式為:10/11/202256第5章多態(tài)與抽純虛函數(shù)與函數(shù)體為空的虛函數(shù)是有區(qū)別的:前者有函數(shù)體,而后者沒有函數(shù)體;前者所在的類是抽象類,不能直接進(jìn)行實(shí)例化,而后者所在的類是可以實(shí)例化的。 10/16/202257第5章多態(tài)與抽象類純虛函數(shù)與函數(shù)體為空的虛函數(shù)是有區(qū)別的:10/11/2022【例5-9】示例純虛函數(shù)及抽象類。計(jì)算圖形面積。例如,要定義一個(gè)Square類和Circle類,它們有共同的屬性x、y,以及共同的操作setvalue()和area(),由于area()在兩個(gè)類的計(jì)算方法不同,但又屬于一個(gè)類簇,為此,定義一個(gè)抽象類Shape,統(tǒng)一它們的屬
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度鋼材原材料采購及運(yùn)輸一體化合同3篇
- 2024藥店負(fù)責(zé)人任期藥品庫存管理與風(fēng)險(xiǎn)管理合同3篇
- 2024版工程項(xiàng)目代建借款合同范本
- 二零二五年度電梯設(shè)備租賃及維保服務(wù)合同2篇
- 二零二五年度股權(quán)激勵(lì)協(xié)議中的股權(quán)激勵(lì)計(jì)劃稅務(wù)籌劃協(xié)議3篇
- 二零二五年度智能交通設(shè)施運(yùn)維勞務(wù)分包合同2篇
- 2024采購防火門窗合同范本
- 2024生鮮水果電商B2C平臺(tái)合作采購合同3篇
- 2025年度煤炭汽車運(yùn)輸合同綠色環(huán)保運(yùn)輸專版3篇
- 學(xué)習(xí)小組介紹報(bào)告模板
- 《中國血脂管理指南》考試復(fù)習(xí)題庫(含答案)
- 人教版道德與法治八年級上冊2.1網(wǎng)絡(luò)改變世界課件
- 外研版小學(xué)英語(三起點(diǎn))六年級上冊期末測試題及答案(共3套)
- 中醫(yī)診療規(guī)范
- 工業(yè)互聯(lián)網(wǎng)平臺(tái) 安全生產(chǎn)數(shù)字化管理 第2部分:石化化工行業(yè) 編制說明
- 第14課《葉圣陶先生二三事》導(dǎo)學(xué)案 統(tǒng)編版語文七年級下冊
- 成人手術(shù)后疼痛評估與護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)2023 2
- DB15-T 3585-2024 高標(biāo)準(zhǔn)農(nóng)田施工質(zhì)量評定規(guī)程
- 北師大版八年級上冊數(shù)學(xué)期中綜合測試卷(含答案解析)
- 天津?yàn)I海新區(qū)2025屆數(shù)學(xué)七年級第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 2024年浙江省臺(tái)州市仙居縣中考二??茖W(xué)試卷
評論
0/150
提交評論