C面向?qū)ο蟪绦蛟O計_第1頁
C面向?qū)ο蟪绦蛟O計_第2頁
C面向?qū)ο蟪绦蛟O計_第3頁
C面向?qū)ο蟪绦蛟O計_第4頁
C面向?qū)ο蟪绦蛟O計_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、包頭鋼鐵職業(yè)技術學院教師教案課程C+面向?qū)ο蟪绦蛟O計班級計算機應用計算機網(wǎng)絡學期課時8學時累計課時8學時教師上課日期課程類型理論,實驗。課程名稱(章、節(jié))第5章 類的繼承與派生5.1 繼承與派生5.2 繼承的三種方式5.3 派生類的構造函數(shù)和析構函數(shù)5.4 多繼承和虛基類5.5 賦值兼容規(guī)則教學目的要 求掌握繼承與派生概念、繼承的三種方式、派生類的構造函數(shù)和析構函數(shù)、多繼承和虛基類的概念、賦值兼容規(guī)則。教學重點繼承與派生概念、繼承的三種方式、派生類的構造函數(shù)和析構函數(shù)、虛基類的概念教學難點繼承的三種方式、派生類的構造函數(shù)和析構函數(shù)、多繼承和虛基類的概念主要教具設備材料多媒體及計算機實驗室。教

2、學 內(nèi) 容 與 板 書備 注第5章 類的繼承與派生5.1 繼承與派生l 5.1.1 基類與派生類l 5.1.2 派生類的聲明l 5.1.3 派生類生成過程5.1.1 基類與派生類l 以原有的類為基礎產(chǎn)生新類,我們就說從原有的類派生出新類。在這個過程中原有的類稱為基類,新類稱為派生類。l 汽車類派生出卡車類。在此過程中,我們稱汽車類為基類,卡車類為汽車類的派生類。l 面向?qū)ο蟪绦蛟O計提供了類的繼承機制,該機制自動的為派生類提供了其基類的操作和屬性,大大的提高了代碼的重用率。 交通工具汽 車旅 游 車卡 車小汽車面 包 車 轎 車工 具 車交通工具分類層次圖人類: 姓名、性別、年齡、身高、體重教師

3、類: 姓名、性別、年齡、身高、體重、專業(yè)、職稱管理人員類: 姓名、性別、年齡、身高、體重、職務教師管理人員類: 姓名、性別、年齡、身高、體重、專業(yè)、職稱、職務學生類: 姓名、性別、年齡、身高、體重、學號、班級、專業(yè)第五章授課內(nèi)容計劃為8學時,應把握悉繼承的三種方式、派生類的構造函數(shù)和析構函數(shù)、多繼承和虛基類的概念包頭鋼鐵職業(yè)技術學院 教 師 教 案包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注間接基類人 類單繼承:派生類只有一個基類管理人員類學生類教師類直接基類多繼承:派生類有多個基類教師管理類繼承與派生的目的l 繼承的目的:實現(xiàn)代碼重用。l 派生的目的:當新的問題出現(xiàn),

4、原有程序無法解決(或不能完全解決)時,需要對原有程序進行改造。5.1.2 派生類的聲明l C+中聲明派生類的形式為:class 派生類名: 繼承方式 基類名1, 繼承方式 基類名2, ,繼承方式 基類名n 派生類的成員聲明;l 聲明中的“基類名”是已經(jīng)存在的類的名稱,“派生類名”是在已存在的類的基礎上通過添加成員而得到的新類。當派生類只有一個直接基類的繼承情況,稱為單繼承。當派生類同時有多個基類的繼承情況,稱為多繼承。派生類1派生類1基類2基類n基類基類1多繼承和單繼承包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注5.1.3 派生類生成過程l 派生類生成過程中需要指定派生

5、類的類名,繼承方式和新增成員。l 派生類的生成過程可分為三個步驟:吸收基類成員改造基類成員和添加新的成員。 吸收基類成員:將基類除構造函數(shù)和析構函數(shù)以外的成員全部接受。 改造基類成員:根據(jù)繼承方式?jīng)Q定基類成員在派生類中的訪問控制問題。 添加新的成員:派生類新增成員是派生類不同于基類的地方,也是繼承和派生機制的關鍵所在。5.2 繼承的三種方式l 5.2.1 公有繼承l(wèi) 5.2.2 私有繼承l(wèi) 5.2.3 保護繼承5.2.1 公有繼承l(wèi) 類的繼承方式為公有繼承的時候,基類的公有和保護成員在派生類中訪問權限不變,而基類的私有成員在派生類中不可直接訪問。l 公有繼承的應用舉例。class Circle

6、: public Pointprivate:float r; public:void Start(float X, float Y, float R) Point:Start(X,Y); r=R; float GetR() return r;5.2.2 私有繼承l(wèi) 類的繼承方式為私有繼承的時候,基類中的公有和保護成員被吸收后成為派生類的私有成員,而基類的私有成員在派生類中不可直接訪問。l 私有繼承應用舉例。class Circle: private Pointprivate:float r; public:void Start(float X, float Y, float R) Point:

7、Start(X,Y); r=R; float GetX() return Point:GetX(); float GetY() return Point:GetY();5.2.3 保護繼承l(wèi) 當類的繼承方式為保護繼承的時候,基類中的公有和保護成員被吸收后成為派生類的保護成員,而基類中的私有成員在派生類中不可直接訪問。保護繼承的例子。包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注class Circle: protected Point private: float r;public: void Start(float X, float Y, float R) Point:

8、Start(X,Y); r=R; float GetR() return r; float GetY() return Point:GetY();基類與派生類的對應關系l 單繼承 派生類只從一個基類派生。l 多繼承 派生類從多個基類派生。 l 多重派生 由一個基類派生出多個不同的派生類。 l 多層派生 派生類又作為基類,繼續(xù)派生新的類。 5.3 派生類的構造函數(shù)和析構函數(shù)l 5.3.1 構造函數(shù)l 5.3.2 析構函數(shù)5.3.1 構造函數(shù)l 因為基類的構造函數(shù)不被繼承,派生類中需要聲明自己的構造函數(shù)。l 聲明構造函數(shù)時,只需要對本類中新增成員進行初始化,對繼承來的基類成員的初始化,自動調(diào)用基類

9、構造函數(shù)完成。l 派生類的構造函數(shù)需要給基類的構造函數(shù)傳遞參數(shù)l 派生類對象在定義的時候要調(diào)用派生類的構造函數(shù)進行初始化工作,也就是為派生類對象的數(shù)據(jù)成員賦初值。l 構造函數(shù)的作用是在對象被創(chuàng)建時用特定的方式構造對象,將對象初始化為一個特定的狀態(tài),使此對象具有區(qū)別于其它對象的特征。l 派生類對象的數(shù)據(jù)成員包括從基類繼承的數(shù)據(jù)成員和派生類新增的數(shù)據(jù)成員,如果派生類有內(nèi)嵌對象作為數(shù)據(jù)成員,那么派生類的數(shù)據(jù)成員還包括內(nèi)嵌對象的數(shù)據(jù)成員。派生類對象定義的時候,構造函數(shù)需要完成上述數(shù)據(jù)成員的初始化工作。l 派生類構造函數(shù)聲明一般語法如下:單一繼承時的構造函數(shù)包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi)

10、 容 與 板 書備 注派生類名:派生類名(基類所需的形參,本類成員所需的形參):基類名(參數(shù)表) 本類成員初始化賦值語句;多繼承時的構造函數(shù)派生類名:派生類名(基類1形參,基類2形參,.基類n形參,本類形參):基類名1(參數(shù)), 基類名2(參數(shù)), .基類名n(參數(shù)) 本類成員初始化賦值語句;l 當基類中聲明有默認形式的構造函數(shù)或未聲明構造函數(shù)時,派生類構造函數(shù)可以不向基類構造函數(shù)傳遞參數(shù)。l 若基類中未聲明構造函數(shù),派生類中也可以不聲明,全采用缺省形式構造函數(shù)。l 當基類聲明有帶形參的構造函數(shù)時,派生類也應聲明帶形參的構造函數(shù),并將參數(shù)傳遞給基類構造函數(shù)。多繼承且有內(nèi)嵌對象時的構造函數(shù)派生類

11、類名:派生類類名(參數(shù)列表): 基類名1(參數(shù)列表1),基類名m(參數(shù)列表m), 內(nèi)嵌對象名1(內(nèi)嵌對參數(shù)列表1),內(nèi)嵌對象n(內(nèi)嵌對象參數(shù)列表n)派生類新增成員的初始化;派生類構造函數(shù)初始化時先調(diào)用基類構造函數(shù)完成從基類繼承數(shù)據(jù)成員的初始化,接著調(diào)用內(nèi)嵌對象的構造函數(shù)完成內(nèi)嵌對象數(shù)據(jù)成員的初始化,最后才調(diào)用派生類構造函數(shù)完成新增數(shù)據(jù)成員的初始化。.3.1 構造函數(shù)l 派生類構造函數(shù)應用舉例。 class GraduateStudent:public Studentprotected:int gCount; public:GraduateStudent(int gN,float gG,int

12、gC):Student(gN,gG)coutConstructing GraduateStudentn;gCount=gC;包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注.3.2 析構函數(shù)l 析構函數(shù)也不被繼承,派生類自行聲明l 聲明方法與一般(無繼承關系時)類的析構函數(shù)相同。l 不需要顯式地調(diào)用基類的析構函數(shù),系統(tǒng)會自動隱式調(diào)用。l 析構函數(shù)的調(diào)用次序與構造函數(shù)相反。l 派生類的析構函數(shù)是在派生類對象生命期結(jié)束之前對派生類新增的數(shù)據(jù)成員完成必要的清理工作。- 析構函數(shù)的作用與構造函數(shù)幾乎正好相反,它在對象刪除前被自動調(diào)用,來完成一些清理工作,也就是一些掃尾工作。 - 派

13、生類析構函數(shù)執(zhí)行順序和構造函數(shù)剛好相反:首先對派生類新增一般數(shù)據(jù)成員進行清理工作,接著對派生類內(nèi)嵌對象成員進行清理工作,最后才是對基類繼承的成員進行清理。這一點,大家可以根據(jù)棧區(qū)“先進后出” 的特性來理解。- 派生類析構函數(shù)應用舉例。class GraduateStudent: public Studentprotected:int gCount; public: GraduateStudent()coutDestructing GraduateStudentn;5.4 多繼承和虛基類 l 5.4.1 派生類成員的標識與訪問 l 5.4.2 作用域分辨 l 5.4.3 多繼承和虛基類 l 5.

14、4.4 虛基類及其派生類的構造函數(shù) 5.4.1 派生類成員的標識與訪問 l 派生類吸收了基類除構造函數(shù)和析構函數(shù)以外的所有成員,并添加新成員得到的類。按照派生類對象能否直接訪問可以把派生類數(shù)據(jù)成員分為兩種。包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注 可見成員。派生類的可見成員也就是派生類的公有成員:派生類從基類繼承的公有成員和派生類新增的公有成員. 不可見成員。派生類的不可見成員就是派生類的私有成員和保護成員:派生類從基類繼承的私有、保護成員和派生類新增的私有、保護成員。5.4.2 作用域分辨 l 作用域分辨解決的是派生類中的同名覆蓋現(xiàn)象。 派生類聲明了和基類同名的新

15、成員(如果是函數(shù)成員則所帶參數(shù)必須相同,否則就是函數(shù)重載),派生類的新成員就覆蓋了從基類繼承的同名成員。直接訪問只能訪問派生類新增成員。為了能夠訪問基類同名成員,我們采用了作用域分辨符來完成這個任務。l 作用域分辨符的使用形式:基類名:成員名; /數(shù)據(jù)成員基類名:成員名(參數(shù)表); /函數(shù)成員5.4.3 多繼承和虛基類l 多繼承是指一個派生類同時有多個直接基類,即一個派生類對象含有多個基類數(shù)據(jù)成員的拷貝。由于多層次的交叉派生關系,多繼承中一個派生類可能保留某個基類的多個實例。l 虛基類就是為了解決多繼承時一個派生類可能保留某個基類多個拷貝的問題。采用虛基類的派生方式保證了在多繼承中某個基類的拷

16、貝只出現(xiàn)一次。AAAABACBCCBCBDDDD(a)非虛基類 (b)虛基類包頭鋼鐵職業(yè)技術學院 教 師 教 案教 學 內(nèi) 容 與 板 書備 注5.4.4 虛基類及其派生類的構造函數(shù) l 如果虛基類定義有帶參數(shù)的構造函數(shù),那么派生類一定要定義帶參數(shù)的構造函數(shù)。l 如果派生類對象中含有從虛基類繼承來的成員,則虛基類的成員是由最遠派生類的構造函數(shù)通過調(diào)用虛基類的構造函數(shù),進行初始化。5.5 賦值兼容規(guī)則 l 賦值兼容規(guī)則是指在需要基類對象的任何地方都可以使用公有派生類的對象來替代。在替代之后,派生類對象就可以作為基類的對象使用,但只能使用從基類繼承的成員。l 賦值兼容規(guī)則替代的幾種情況: 派生類的對象可以賦值給基類對象。 派生類的對象可以初始化基類的引用。 派生類的對象的地址可以賦給指向基類的指針。 賦值兼容規(guī)則應用舉例。class Student;class MiddleStudent: public Student;class GraduateStudent: public MiddleStudent;Student *ps; MiddleStudent ms; GraduateStudent gs; ps=&ms; ps=&gs; 習題五1.比較類的三種繼承方式公有繼承,保護繼承和私有繼承之間的區(qū)別,并畫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論