版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、回顧基類(lèi)和派生類(lèi)對(duì)象的轉(zhuǎn)換類(lèi)指針的使用多重繼承復(fù)合與繼承的關(guān)系虛基類(lèi)概念虛基類(lèi)構(gòu)造函數(shù)虛繼承1目標(biāo)靜態(tài)綁定和動(dòng)態(tài)綁定的概念多態(tài)性的意義和作用虛函數(shù)的定義方法抽象基類(lèi)的作用和定義方法虛析構(gòu)函數(shù)的作用和使用方法如何在程序中實(shí)現(xiàn)多態(tài)性2多態(tài)性的概念多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一多態(tài)性概念:具有繼承關(guān)系的類(lèi),其對(duì)象對(duì)同一個(gè)函數(shù)調(diào)用可以作出不同的響應(yīng)同一個(gè)函數(shù)調(diào)用同一條函數(shù)調(diào)用語(yǔ)句不同的響應(yīng)執(zhí)行不同的函數(shù)3靜態(tài)綁定與動(dòng)態(tài)綁定靜態(tài)綁定編譯時(shí)就能確定一條函數(shù)調(diào)用語(yǔ)句要調(diào)用的函數(shù)在程序編譯時(shí)多態(tài)性體現(xiàn)在函數(shù)和運(yùn)算符的重載上動(dòng)態(tài)綁定運(yùn)行時(shí)才能確定函數(shù)調(diào)用語(yǔ)句調(diào)用的函數(shù)程序運(yùn)行時(shí)的多態(tài)性通過(guò)繼承和虛函數(shù)來(lái)
2、體現(xiàn)4多態(tài)性的優(yōu)點(diǎn)多態(tài)性有助于更好地對(duì)程序進(jìn)行抽象控制模塊能專(zhuān)注于一般性問(wèn)題的處理具體的操作交給具體的對(duì)象去做多態(tài)性有助于提高程序的可擴(kuò)展性可以把控制模塊與被操作的對(duì)象分開(kāi)可以添加已定義類(lèi)的新對(duì)象,并能管理該對(duì)象可以添加新類(lèi)(已有類(lèi)的派生類(lèi))的新對(duì)象,并能管理該對(duì)象5虛函數(shù)虛函數(shù)的概念:在基類(lèi)中冠以關(guān)鍵字 virtual 的成員函數(shù)虛函數(shù)的定義:virtual 函數(shù)類(lèi)型 函數(shù)名稱(chēng)(參數(shù)列表);如果一個(gè)函數(shù)在基類(lèi)中被聲明為虛函數(shù),則他在所有派生類(lèi)中都是虛函數(shù)(包括重定義函數(shù))只有通過(guò)基類(lèi)指針或引用調(diào)用虛函數(shù)才能引發(fā)動(dòng)態(tài)綁定6虛函數(shù)的使用2-1/文件base.h定義基類(lèi)#if !defined B
3、ASE_H#define BASE_Hclass Base public:virtual void show();#endif/文件base.cpp基類(lèi)的實(shí)現(xiàn)#include “base.h”#include void Base:show() coutI am Bases object!n;/文件derived.h定義派生類(lèi)Derived#if !defined DERIVED_H#define DERIVED_H#include base.hclass Derived :public Basepublic:void show();#endif#include “derived.h”#incl
4、ude void Derived:show() coutshow();/用基類(lèi)指針調(diào)用成員函數(shù),動(dòng)態(tài)綁定bPtr= &dObj;/基類(lèi)指針指向基類(lèi)對(duì)象bPtr-show();/用基類(lèi)指針調(diào)用成員函數(shù),動(dòng)態(tài)綁定return 0;8虛函數(shù)的注意事項(xiàng)在類(lèi)體系中訪(fǎng)問(wèn)一個(gè)虛函數(shù)時(shí),應(yīng)使用指向基類(lèi)類(lèi)型的指針或?qū)?lèi)類(lèi)型的引用,以滿(mǎn)足運(yùn)行時(shí)多態(tài)性的要求。在派生類(lèi)中重新定義虛函數(shù)時(shí),必須保證該函數(shù)的值和參數(shù)與基類(lèi)中的說(shuō)明完全一致,否則就屬于隱藏。若在派生類(lèi)中沒(méi)有重新定義虛函數(shù),則該類(lèi)的對(duì)象將使用其基類(lèi)中的虛函數(shù)代碼。虛函數(shù)必須是類(lèi)的一個(gè)成員函數(shù),不能是友元,但它可以是另一個(gè)類(lèi)的友元。虛函數(shù)不得是一個(gè)靜態(tài)成員。
5、(暫時(shí)不討論)9虛函數(shù)和重載函數(shù)的區(qū)別成員函數(shù)被重載需要在相同范圍(同一個(gè)類(lèi)中),而虛函數(shù)要求在不同的范圍(一個(gè)在派生類(lèi),一個(gè)在基類(lèi))重載函數(shù)要求函數(shù)有相同的函數(shù)名稱(chēng),并有不同的參數(shù)序列;而虛函數(shù)則要求這三項(xiàng)(函數(shù)名、返回值類(lèi)型和參數(shù)序列)完全相同重載函數(shù)可以是成員函數(shù)或友員函數(shù),而虛函數(shù)只能是成員函數(shù)(暫時(shí)先不看)重載函數(shù)的調(diào)用是以所傳遞參數(shù)序列的差別作為調(diào)用不同函數(shù)的依據(jù);虛函數(shù)是根據(jù)對(duì)象的不同去調(diào)用不同類(lèi)的虛函數(shù)虛函數(shù)在運(yùn)行時(shí)表現(xiàn)出多態(tài)功能,這是C+的精髓;而重載函數(shù)則在編譯時(shí)表現(xiàn)出多態(tài)性10虛析構(gòu)函數(shù)2-1動(dòng)態(tài)對(duì)象的創(chuàng)建new ClassName();ClassName指明了要調(diào)用的構(gòu)
6、造函數(shù)動(dòng)態(tài)對(duì)象的撤銷(xiāo)delete 基類(lèi)指針;如果基類(lèi)指針指向的是派生類(lèi)的對(duì)象呢?11虛析構(gòu)函數(shù)2-2析構(gòu)函數(shù)可以聲明為虛函數(shù)delete 基類(lèi)指針;程序會(huì)根據(jù)基類(lèi)指針指向的對(duì)象的類(lèi)型確定要調(diào)用的析構(gòu)函數(shù)基類(lèi)的析構(gòu)函數(shù)為虛函數(shù),所有派生類(lèi)的析構(gòu)函數(shù)都是虛函數(shù)構(gòu)造函數(shù)不得是虛函數(shù)如果要操作具有繼承關(guān)系的類(lèi)的動(dòng)態(tài)對(duì)象,最好使用虛析構(gòu)函數(shù)。特別是在析構(gòu)函數(shù)需要完成一些有意義的操作比如釋放內(nèi)存時(shí)12虛析構(gòu)函數(shù)使用4-1/文件employee.h,定義基類(lèi)Employee#include #if !defined EMPLOYEE_H#define EMPLOYEE_Hclass Employeepubl
7、ic:Employee()coutEmployee begin!endl; virtual Employee() coutEmployee end!endl;#endif/文件accountant.h定義派生類(lèi)Accountant#include #include employee.hclass Accountant: public Employeepublic:Accountant(int n) coutAccountant begin!“endl;age = n;Accountant() coutAccountant end!endl;private:int age;13虛析構(gòu)函數(shù)使用4-
8、2/文件programmer.h/定義派生類(lèi)Programmer#ifndef PROGRAMMER_H#define PROGRAMMER_H#include employee.hclass Programmer: public Employeepublic:Programmer(char *str) ;Programmer();private:char *name;#endif/文件programmer.cppinclude “programmer.h”#include #include Programmer: Programmer() delete name; coutProgramme
9、r end!“endl;Programmer:Programmer(char *str)coutProgrammer begin!“endl;name = new charstrlen(str)+1;strcpy(name, str);14虛析構(gòu)函數(shù)使用4-3#include accountant.h#include programmer.hconst int MAX = 100;void main() int no;/聲明儲(chǔ)存雇員信息的數(shù)組Employee *ptrMAX, *tptr;int ENum = 0;char name100;int age;for (int i=0; iMAX;
10、 i+) ptri = NULL; /輸入雇員信息coutInput employees info:“endl;cout1 - Programmer“endl2 - Accountantendl0 - exitno;while (no)15虛析構(gòu)函數(shù)使用4-4switch (no) case 1:/輸入程序員信息coutname;tptr = new Programmer(name);ptrENum+ = tptr;break;case 2:/輸入會(huì)計(jì)信息coutage;tptr = new Accountant(age);ptrENum+ = tptr;break;default :brea
11、k; coutInput another employees info:“endl;cout1 - Programmerendl2 -Accountantendl0 - exit“no;16純虛函數(shù)2-1實(shí)現(xiàn)多態(tài)性的前提需要有共同的基類(lèi)需要在基類(lèi)中定義共同的接口接口要定義為虛函數(shù)如果基類(lèi)的接口沒(méi)辦法實(shí)現(xiàn)怎么辦?如形狀類(lèi)Shape解決方法不實(shí)現(xiàn)這些接口:純虛函數(shù)包含純虛函數(shù)的類(lèi):抽象基類(lèi)17純虛函數(shù)2-2在基類(lèi)中不能給出有意義的虛函數(shù)定義,這時(shí)可以把它說(shuō)明成純虛函數(shù),把它的定義留給派生類(lèi)來(lái)做定義純虛函數(shù):class 類(lèi)名 virtual 返回值類(lèi)型 函數(shù)名(參數(shù)表) = 0; ;純虛函數(shù)不需要實(shí)
12、現(xiàn)18抽象類(lèi)2-1如果一個(gè)類(lèi)中至少有一個(gè)純虛函數(shù),那么這個(gè)類(lèi)被成為抽象類(lèi)(abstract class)抽象類(lèi)存在的意義是作為其它類(lèi)的基類(lèi),也叫抽象基類(lèi)主要作用:取若干類(lèi)的共同行為,形成更清晰的概念層次。19抽象類(lèi)2-2抽象類(lèi)不能用于直接創(chuàng)建對(duì)象實(shí)例,可以聲明抽象類(lèi)的指針和引用可使用指向抽象類(lèi)的指針支持運(yùn)行時(shí)多態(tài)性派生類(lèi)中必須重載基類(lèi)中的純虛函數(shù),否則它仍將被看作一個(gè)抽象類(lèi)20抽象類(lèi)的使用4-2/文件circle.h,定義派生類(lèi)Circle#if !defined CIRCLE_H#define CIRCLE_H#include shape.h#define PI 3.1416class Ci
13、rcle :public Shape public:Circle(double=0.0,double=0.0,double=1.0); double area() const; void show() const;private: double x,y; double r;#endif/文件circle.cpp,實(shí)現(xiàn)類(lèi)Circle#include circle.hCircle:Circle(double a, double b, double c)x = a;y = b; r = c;double Circle:area() const return PI*r*r; void Circle:s
14、how() const coutI am a Circle: ;21抽象類(lèi)的使用4-1/文件shape.h/定義抽象基類(lèi)Shape#if !defined SHAPE_H#define SHAPE_H#include class Shapepublic:virtual double area() const = 0;virtual void show() const = 0;#endif22抽象類(lèi)的使用4-3/文件rectangle.h/定義派生類(lèi)Rectangle#if !defined _RECTANGLE_H_#define _RECTANGLE_H_#include shape.hcl
15、ass Rectangle :public Shape public: Rectangle(double = 1.0, double = 1.0); double area() const; void show() const;private: double length; double width;#endif/文件rectangle.cpp,實(shí)現(xiàn)類(lèi)Rectangle#include rectangle.hRectangle:Rectangle(double a, double b) length = a; width = b;double Rectangle:area() const return length*width;void Rectangle:show() const cout I am a Rectangle: ;23抽象類(lèi)的使用4-4#include circle.h#include rectangle.hvoid callArea(Sh
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物理板塊模型課程設(shè)計(jì)
- 乒乓球用品行業(yè)銷(xiāo)售工作總結(jié)
- 酒店旅游行業(yè)行政后勤工作總結(jié)
- 線(xiàn)描基本技法課程設(shè)計(jì)
- 圖文制作行業(yè)前臺(tái)接待工作總結(jié)
- 三年高考地理(全國(guó)乙卷21-23)真題知識(shí)點(diǎn)-人口與城市
- 組織學(xué)生參加競(jìng)賽活動(dòng)計(jì)劃
- 2023-2024學(xué)年北京市清華大學(xué)附中朝陽(yáng)學(xué)校高一(下)期中語(yǔ)文試卷
- DB32T 3393-2018 警務(wù)效能監(jiān)察工作規(guī)范
- 網(wǎng)絡(luò)零售店店員工作總結(jié)
- 中小企業(yè)內(nèi)部控制與風(fēng)險(xiǎn)管理(第二版)項(xiàng)目一:內(nèi)部控制與風(fēng)險(xiǎn)管理基礎(chǔ)
- 駕駛艙資源管理緒論課件
- 聲藝 EPM8操作手冊(cè)
- 西北農(nóng)林科技大學(xué)專(zhuān)業(yè)學(xué)位研究生課程案例庫(kù)建設(shè)項(xiàng)目申請(qǐng)書(shū)(MBA)
- 外墻保溫、真石漆施工技術(shù)交底
- 車(chē)床日常點(diǎn)檢表
- 配網(wǎng)工程施工監(jiān)理管理要點(diǎn)~.docx
- 國(guó)內(nèi)No.7信令方式技術(shù)規(guī)范----綜合業(yè)務(wù)數(shù)字網(wǎng)用戶(hù)部分(ISUP)
- 尾礦庫(kù)在線(xiàn)監(jiān)測(cè)方案)
- 房屋安全簡(jiǎn)易鑒定表.docx
- FSSC運(yùn)營(yíng)管理制度(培訓(xùn)管理辦法)
評(píng)論
0/150
提交評(píng)論