大學(xué)C程序設(shè)計(jì)教程課件_第1頁
大學(xué)C程序設(shè)計(jì)教程課件_第2頁
大學(xué)C程序設(shè)計(jì)教程課件_第3頁
大學(xué)C程序設(shè)計(jì)教程課件_第4頁
大學(xué)C程序設(shè)計(jì)教程課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、大學(xué)C+程序設(shè)計(jì)教程西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心大學(xué)C+程序設(shè)計(jì)教程第10章 繼承和派生本章目標(biāo)1掌握繼承和派生的概念,派生類的定義方法。2繼承的不同方式對(duì)基類成員的訪問控制3掌握單繼承的概念、定義方法、單繼承派生類構(gòu)造函數(shù)的執(zhí)行順序。4. 理解多繼承的概念5. 虛基類的概念和定義1第10章 繼承和派生本章目標(biāo)1授課內(nèi)容10.1 基類與派生類 10.2 派生類的繼承方式 10.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù) 10.4 接口和實(shí)現(xiàn)方法的分離10.5 顯示訪問基類成員10.6 使用this指針2授課內(nèi)容10.1 基類與派生類 2水果的分類3水果的分類310.1 繼承和派生從一個(gè)或多個(gè)以前定義的類

2、(基類)產(chǎn)生新類的過程稱為派生,這個(gè)新類又稱為派生類。類的繼承(inheritance)是指新類從基類那里得到基類的特征,也就是繼承基類的數(shù)據(jù)和函數(shù)。派生的新類同時(shí)也可以增加或重新定義數(shù)據(jù)和操作,這就產(chǎn)生了類的層次性。派生就是創(chuàng)建一個(gè)具有別的類的屬性和行為的新類的能力。派生和繼承的概念也來自于人們認(rèn)識(shí)客觀世界的過程。410.1 繼承和派生從一個(gè)或多個(gè)以前定義的類(基類)產(chǎn)生新類層次概念客觀世界本身是有層次的,人們認(rèn)識(shí)客觀世界的過程中,由一般到特殊的演繹思維發(fā)揮著巨大作用。演繹的過程在絕大多數(shù)情況下就表現(xiàn)為層次分類的過程。繼承使得程序員可以在一個(gè)較一般的類的基礎(chǔ)上很快地建立一個(gè)新類,而不必從零開

3、始設(shè)計(jì)每個(gè)類。5層次概念客觀世界本身是有層次的,人們認(rèn)識(shí)客觀世界的過程中,由繼承常用來表示類屬關(guān)系,不能將繼承理解為構(gòu)成關(guān)系。當(dāng)從現(xiàn)存類中派生出新類時(shí),可以對(duì)派生類做如下幾種變化: 可以增加新的數(shù)據(jù)成員; 可以增加新的成員函數(shù); 可以重新定義已有的成員函數(shù); 可以改變現(xiàn)有成員的屬性。6繼承常用來表示類屬關(guān)系,不能將繼承理解為構(gòu)成關(guān)系。當(dāng)從現(xiàn)存類基類1基類2基類n派生類1派生類2基類派生類1派生類2(a)多重繼承 (b)單繼承 一個(gè)基類可以直接派生出多個(gè)派生類 派生出來的新類同樣可以作為基類再繼續(xù)派生出更新的類,依此類推形成一個(gè)層次結(jié)構(gòu)。 多重繼承與單繼承 如果一個(gè)派生類可以同時(shí)有多個(gè)基類,稱為

4、多重繼承(multiple-inheritance),這時(shí)的派生類同時(shí)得到了多個(gè)已有類的特征。一個(gè)派生類只有一個(gè)直接基類的情況稱為單一繼承(single-inheritance)。7基類1基類2基類n派生類1派生類2基類派生類1派生類2(派生類的定義格式:class 派生類名:訪問權(quán)限 基類名1,訪問限定符 基類名2,訪問限定符 基類名n private:成員表1; /派生類增加或替代的私有成員public: 成員表2; /派生類增加或替代的公有成員protected: 成員表3; /派生類增加或替代的保護(hù)成員;/分號(hào)不可少8派生類的定義格式:class 派生類名:訪問權(quán)限 基類其中基類1,基

5、類2,是已聲明的類。 在派生類定義的類體中給出的成員稱為派生類成員,它們是新增加的數(shù)據(jù)和函數(shù)成員。這些新增加的成員是派生類對(duì)基類的發(fā)展,它們給派生類添加了不同于基類的新的屬性和功能。派生類成員包括新添加的,也包括通過屏蔽作用,取代基類成員的更新成員9其中基類1,基類2,是已聲明的類。 在派生類定義的類體中 訪問控制,亦稱為繼承方式,是對(duì)基類成員進(jìn)一步的限制。訪問控制也是三種:公有(public)方式,保護(hù)(protected)方式和私有(private)方式,亦稱公有繼承、保護(hù)繼承和私有繼承。 編制派生類時(shí)可分四步 吸收基類的成員 改造基類成員 發(fā)展新成員 重寫構(gòu)造函數(shù)與析構(gòu)函數(shù) 派生類中成員

6、的變化不論是數(shù)據(jù)成員,還是函數(shù)成員,除構(gòu)造函數(shù)與析構(gòu)函數(shù)外全盤接收 聲明一個(gè)和某基類成員同名的新成員派生類中的新成員就屏蔽了基類同名成員稱為同名覆蓋(override) 派生類新成員必須與基類成員不同名,它的加入保證派生類在功能上有所發(fā)展。 10 訪問控制,亦稱為繼承方式,是對(duì)基類成員進(jìn)一步的限制。10.2 派生類的繼承方式不可直接訪問 不可直接訪問 private 不可直接訪問 private protected 不可直接訪問 private public 私有派生 不可直接訪問 不可直接訪問 private 不可直接訪問 protected protected 可直接訪問 public p

7、ublic 公有派生 外部函數(shù)void main ( )在派生類中對(duì)基類成員的訪問限定 基類中的訪問限定 派生方式 在派生類的定義中,基類前所加的訪問限定符有兩方面含義:派生類成員(新增成員)函數(shù)對(duì)基類(繼承來的)成員的訪問(調(diào)用和操作),和從派生類對(duì)象之外對(duì)派生類對(duì)象中的基類成員的訪問。公有派生是絕對(duì)主流。 1110.2 派生類的繼承方式不可直接訪問 不可直接訪問 pr實(shí)例:公有繼承(public) class Person/人員類定義protected:char Name10;/姓名intAge;/年齡charSex;/性別 public:void Register(char *name,

8、 int age, char sex) ;void ShowMe();12實(shí)例:公有繼承(public) class Person/class Employee: public Person /雇員類定義char Dept20;/工作部門float Salary; /月薪public: Employee() ;void EmployeeRegister(char *name, int age, char sex, char *dept, float salary);void ShowEmp(); /顯示雇員信息 ;13class Employee: public Person 保護(hù)繼承(pub

9、lic)保護(hù)繼承方式創(chuàng)建的派生類對(duì)基類各種成員訪問權(quán)限如下 :基類的公有成員和保護(hù)成員都相當(dāng)于派生類的保護(hù)成員,派生類可以通過自身的成員函數(shù)或其子類的成員函數(shù)訪問他們對(duì)于基類的私有成員,無論派生類內(nèi)部成員或派生類使用者都無法直接訪問 14保護(hù)繼承(public)保護(hù)繼承方式創(chuàng)建的派生類對(duì)基類各種10.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類構(gòu)造函數(shù)的一般形式為:派生類名:派生類名(參數(shù)總表):基類名1(參數(shù)表1),基類名n(參數(shù)表n),內(nèi)嵌對(duì)象名1(對(duì)象參數(shù)表1),內(nèi)嵌對(duì)象名m(對(duì)象參數(shù)表m)派生類新增加成員的初始化;派生類與基類的析構(gòu)函數(shù)沒有什么聯(lián)系,彼此獨(dú)立,派生類或基類的析構(gòu)函數(shù)只作各自類對(duì)

10、象消亡前的善后工作1510.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類構(gòu)造函數(shù)的一般形式派生類構(gòu)造函數(shù)各部分的執(zhí)行次序?yàn)椋?.調(diào)用基類構(gòu)造函數(shù),按它們?cè)谂缮惗x的先后順序,順序調(diào)用。 2.調(diào)用內(nèi)嵌對(duì)象構(gòu)造函數(shù),調(diào)用次序按各個(gè)對(duì)象在派生類內(nèi)聲明的順序。3.派生類的構(gòu)造函數(shù)體中的操作。*在派生類構(gòu)造函數(shù)中,只要基類不是使用缺省構(gòu)造函數(shù)都要顯式給出基類名和參數(shù)表。如果基類沒有定義構(gòu)造函數(shù),則派生類也可以不定義,全部采用系統(tǒng)給定的缺省構(gòu)造函數(shù)。如果基類定義了帶有形參表的構(gòu)造函數(shù)時(shí),派生類就應(yīng)當(dāng)定義構(gòu)造函數(shù)。16派生類構(gòu)造函數(shù)各部分的執(zhí)行次序?yàn)椋?.調(diào)用基類構(gòu)造函數(shù),按它例10-3 派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)

11、的執(zhí)行 #include #include class Person char Name10; intAge;public:Person(char* name,int age) strcpy(Name, name);Age = age;coutconstructor of personNameendl; Person() coutdeconstrutor of personNameendl;17例10-3 派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行 #includeclass Employee : public Personchar Dept20;PersonWang;public:Employee(ch

12、ar *name, int age, char *dept, char *name1, int age1): Person(name,age) , Wang(name1,age1)strcpy(Dept, dept);coutconstructor of Employeeendl;Employee() coutdeconstrucor of Employeeendl; ;18class Employee : public Personint main() Employee emp(張弓長,40,人事處,李木子,36);return 0;19int main()19派生類構(gòu)造函數(shù)的執(zhí)行次序首先,

13、調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按照它們被繼承時(shí)聲明的基類名順序執(zhí)行。其次,調(diào)用內(nèi)嵌對(duì)象構(gòu)造函數(shù),調(diào)用次序按各個(gè)對(duì)象在派生類內(nèi)聲明的順序。最后,執(zhí)行派生類構(gòu)造函數(shù)體中的內(nèi)容。 20派生類構(gòu)造函數(shù)的執(zhí)行次序首先,調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按照析構(gòu)函數(shù) 派生類析構(gòu)函數(shù)執(zhí)行過程恰與構(gòu)造函數(shù)執(zhí)行過程相反。首先執(zhí)行派生類析構(gòu)函數(shù)然后執(zhí)行內(nèi)嵌對(duì)象的析構(gòu)函數(shù)最后執(zhí)行基類析構(gòu)函數(shù) 21析構(gòu)函數(shù) 派生類析構(gòu)函數(shù)執(zhí)行過程恰與構(gòu)造函數(shù)執(zhí)行過程相反。2自學(xué)內(nèi)容接口與實(shí)現(xiàn)方法的分離顯式訪問基類成員this指針22自學(xué)內(nèi)容接口與實(shí)現(xiàn)方法的分離22程序設(shè)計(jì)舉例例10-6 一個(gè)基類及其兩個(gè)派生類例10-7 多重繼承,從多個(gè)基類派生出來的類class Derived : public Base1, public Base2double real; public:Derived( int, char, double );double getReal() const;void Output(); 23程序設(shè)計(jì)舉例例10-6 一個(gè)基類及其兩個(gè)派生類23編程實(shí)例:棋子類class ChineseStone : public Stonechar strType10;/ 棋子類型intR;/ 棋子半徑public:ChineseSt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論