資源描述:
《《C語(yǔ)言繼承與派生》PPT課件.ppt》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第7章繼承與派生7.1繼承與派生7.2多繼承7.3類(lèi)的繼承方式7.4派生類(lèi)的構(gòu)造和析構(gòu)函數(shù)7.5派生中成員的標(biāo)識(shí)與訪(fǎng)問(wèn)7.6虛基類(lèi)7.7類(lèi)模板的派生和繼承7.1繼承與派生7.1.1繼承與派生的概念舉個(gè)簡(jiǎn)單的例子:“狗”和“黑狗”。當(dāng)談?wù)摗肮贰钡臅r(shí)候,知道它是哺乳動(dòng)物,有4條腿,1條尾巴,喜歡啃肉骨頭,……?,F(xiàn)在談?wù)摗昂诠贰?,人們?huì)怎么說(shuō)呢?當(dāng)然可以說(shuō):“黑狗是一種哺乳動(dòng)物,有4條腿,1條尾巴,喜歡吃肉骨頭,……,并且它的毛是黑色的”。但是人們一般都不這么說(shuō),而是說(shuō):“黑狗就是黑毛的狗”。比較一下這兩種說(shuō)法,顯然后一種說(shuō)法更好。那么它好在哪里呢?第一,它更簡(jiǎn)煉;第二,更重
2、要的是它反映了“狗”和“黑狗”這兩個(gè)概念的內(nèi)在聯(lián)系。“狗”和“黑狗”之間存在一條重要的聯(lián)系,那就是所有的“黑狗”都是“狗”,或者說(shuō),“黑狗”是一類(lèi)特殊的“狗”。根據(jù)這一條,“狗”所具有的特征,例如4條腿,1條尾巴等,“黑狗”自然都具有。也就是說(shuō),“黑狗”從“狗”那里繼承了“狗”的全部特征。所謂繼承,就是新的類(lèi)從已有類(lèi)那里得到已有的特性。從另一個(gè)角度來(lái)看,從已有類(lèi)產(chǎn)生新類(lèi)的過(guò)程就是類(lèi)的派生。已有的類(lèi)稱(chēng)為基類(lèi)或父類(lèi),產(chǎn)生的新類(lèi)稱(chēng)為派生類(lèi)或子類(lèi)。派生類(lèi)同樣也可以作為基類(lèi)再派生新的類(lèi),這樣就形成了類(lèi)的層次結(jié)構(gòu)。類(lèi)的繼承和派生的層次結(jié)構(gòu),可以說(shuō)是人們對(duì)自然界中的事物進(jìn)行分類(lèi)、分析
3、和認(rèn)識(shí)的過(guò)程在程序設(shè)計(jì)中的體現(xiàn)?,F(xiàn)實(shí)世界中的事物都是相互聯(lián)系、相互作用的,人們?cè)谡J(rèn)識(shí)過(guò)程中,根據(jù)事物的實(shí)際特征,抓住其共同特性和細(xì)小差別,利用分類(lèi)的方法進(jìn)行分析和描述。C++中有兩種繼承:?jiǎn)我焕^承和多重繼承。對(duì)于單一繼承,派生類(lèi)只能有一個(gè)基類(lèi);對(duì)于多重繼承,派生類(lèi)可以有多個(gè)基類(lèi)。圖7-1交通工具分類(lèi)層次圖例如,對(duì)于交通工具的分類(lèi)見(jiàn)圖7-1。7.1.2單一繼承的派生類(lèi)聲明在C++中,派生類(lèi)的一般聲明語(yǔ)法如下:class<派生類(lèi)名>:[繼承方式]<基類(lèi)名>{派生類(lèi)成員聲明;};其中:①class是類(lèi)聲明的關(guān)鍵字,用于告訴編譯器下面聲明的是一個(gè)類(lèi)。②派生類(lèi)名是新生成的類(lèi)名。③
4、繼承方式規(guī)定了如何訪(fǎng)問(wèn)從基類(lèi)繼承的成員。繼承方式關(guān)鍵字為private、public和protected,分別表示私有繼承、公有繼承和保護(hù)繼承。如果不顯式地給出繼承方式關(guān)鍵字,系統(tǒng)的默認(rèn)值就認(rèn)為是私有繼承(private)。類(lèi)的繼承方式指定了派生類(lèi)成員以及類(lèi)外對(duì)象對(duì)于從基類(lèi)繼承來(lái)的成員的訪(fǎng)問(wèn)權(quán)限,這將在7.3節(jié)中詳細(xì)介紹。④派生類(lèi)成員指除了從基類(lèi)繼承來(lái)的所有成員之外,新增加的數(shù)據(jù)和函數(shù)成員。這些新增的成員正是派生類(lèi)不同于基類(lèi)的關(guān)鍵所在,是派生類(lèi)對(duì)基類(lèi)的發(fā)展。當(dāng)重用和擴(kuò)充已有的代碼時(shí),就是通過(guò)在派生類(lèi)中新增成員來(lái)添加新的屬性和功能??梢哉f(shuō),這就是類(lèi)在繼承基礎(chǔ)上的進(jìn)化和發(fā)展
5、。例如,從基類(lèi)vehicle(汽車(chē))公有派生car(小汽車(chē))類(lèi)的聲明形式如下:classvehicle//基類(lèi)vehicle類(lèi)的聲明{private://私有數(shù)據(jù)成員intwheels;floatweight;public://公有函數(shù)成員voidinitvehicle(intin_wheels,floatin_weight);intget_wheels();floatget_weight();//...};classcar:publicvehicle//派生類(lèi)car類(lèi)的聲明{private://新增私有數(shù)據(jù)成員intpassenger_load;public://新增
6、公有函數(shù)成員voidinitcar(intin_wheels,floatin_weight,intpeople=4);intget_passengers();//...};7.1.3派生類(lèi)生成過(guò)程仔細(xì)分析派生新類(lèi)這個(gè)過(guò)程,實(shí)際是經(jīng)歷了三個(gè)步驟:吸收基類(lèi)成員,改造基類(lèi)成員和添加新的成員。面向?qū)ο蟮睦^承和派生機(jī)制,其最主要的目的是實(shí)現(xiàn)代碼的重用和擴(kuò)充。因此,吸收基類(lèi)成員就是一個(gè)重用的過(guò)程,而對(duì)基類(lèi)成員進(jìn)行調(diào)整、改造以及添加新成員就是原有代碼的擴(kuò)充過(guò)程,二者是相輔相成的。下面以某公司人員管理系統(tǒng)為例,分別對(duì)這幾個(gè)步驟進(jìn)行解釋?;?lèi)employee和派生類(lèi)technician聲
7、明如下,類(lèi)的實(shí)現(xiàn)部分略去。classemployee{protected:char*name;//姓名intindividualEmpNo;//個(gè)人編號(hào)intgrade;//級(jí)別floataccumPay;//月薪總額staticintemployeeNo;//本公司職員編號(hào)目前最大值public:employee();~employee();voidpay();//計(jì)算月薪函數(shù)voidpromote(int);//升級(jí)函數(shù)voiddisplayStatus();//顯示人員信息};classtechnician:publicemploy