freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c電子課件(下)第八章(編輯修改稿)

2025-01-19 12:16 本頁面
 

【文章內(nèi)容簡介】 由基類繼承來的成員,不能訪問派生類中的新成員。同樣也不能反過來做。 3. 派生類對象可以初始化基類的引用。引用是別名,但這個別名只能包含派生類對象中的由基類繼承來的成員。 【 例 】 按賦值兼容規(guī)則為例 。 二、繼承與聚合 繼承使派生類可以利用基類的成員,如果我們把基類的對象作為一個新類的對象成員,也可以取得類似的效果。派生類采用繼承方法,成員對象是聚合的概念。 基類在派生類中只能繼承一個(間接基類不在討論之中)不能同時安排兩個,否則成員名即使使用域分辨符也會發(fā)生沖突: class A{public:int K。...}。 class B:public A,public A{...}。 兩個 A無論如何無法分辨出來。 如果要用兩個 A 只能采用成員對象 。 更深入地探討后會發(fā)現(xiàn):成員對象體現(xiàn)了封裝更深層次的含義。在派生類和它的基類中是不應(yīng)該有內(nèi)存的動態(tài)分配的,動態(tài)分配的部分應(yīng)該封裝在成員對象中,在該成員對象的析構(gòu)函數(shù)中釋放內(nèi)存,在該成員對象中提供深復(fù)制 。類 string就是如此。它的內(nèi)部就是一個 完備的小系統(tǒng) 。這樣程序員就可以放心地使用它,而不需要為它做任何事情。 派生類應(yīng)用討論 三、派生類與模板: 為了運(yùn)行的效率,類模板是相互獨(dú)立的,即獨(dú)立設(shè)計(jì),沒有使用繼承的思想。對類模板的擴(kuò)展是采用適配子( adapter)來完成的。通用性是模板庫的設(shè)計(jì)出發(fā)點(diǎn)之一,這是由泛型算法和函數(shù)對象等手段達(dá)到的。 派生類的目標(biāo)之一也是代碼的復(fù)用和程序的通用性,最典型的就是 MFC,派生類的優(yōu)點(diǎn)是可以由簡到繁,逐步深入,程序編制過程中可以充分利用前面的工作,一步步完成一個復(fù)雜的任務(wù)。 模板追求的是運(yùn)行效率,而派生追求的是編程的效率。 派生類應(yīng)用討論 多態(tài)性與虛函數(shù) 多態(tài)性: 多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的關(guān)鍵技術(shù)之一。若程序設(shè)計(jì)語言 不支持多態(tài)性,不能稱為面向?qū)ο蟮恼Z言 。利用多態(tài)性技術(shù),可以調(diào)用同一個函數(shù)名的函數(shù),實(shí)現(xiàn)完全不同的功能。 在 C++中有兩種多態(tài)性 編譯時的多態(tài)性 運(yùn)行時的多態(tài)性 運(yùn)行時的多態(tài)性是指在程序執(zhí)行前,無法根據(jù)函數(shù)名和參數(shù)來確定該調(diào)用哪一個函數(shù),必須在程序執(zhí)行過程中,根據(jù)執(zhí)行的具體情況來動態(tài)地確定。它是 通過類繼承關(guān)系和虛函數(shù)來實(shí)現(xiàn)的。 目的也是建立一種通用的程序 。通用性是程序追求的主要目標(biāo)之一。 通過函數(shù)的重載和運(yùn)算符的重載來實(shí)現(xiàn)的。 多態(tài)性與虛函數(shù) 虛函數(shù)的定義 動態(tài)綁定 (選讀) 純虛函數(shù) 繼承與多態(tài)的應(yīng)用 —— 單鏈表派生類(選讀) 虛函數(shù)的定義 虛函數(shù)的概念: 虛函數(shù)是一個類的成員函數(shù),定義格式如下: virtual 返回類型 函數(shù)名(參數(shù)表) {… }; 關(guān)鍵字 virtual指明該成員函數(shù)為虛函數(shù)。 virtual僅用于類定義中,如虛函數(shù)在類外定義,不可再加virtual。 當(dāng)一個類的某個成員函數(shù)被定義為虛函數(shù),則由該類派生出來的所有派生類中,該函數(shù)始終保持虛函數(shù)的特征。 虛函數(shù)的定義 當(dāng)在派生類中重新定義虛函數(shù)( overriding a virtual function,亦譯作超載或覆蓋)時,不必加關(guān)鍵字 virtual。但重新定義時不僅要同名,而且它的參數(shù)表和返回類型全部與基類中的虛函數(shù)一樣,否則出錯。 虛函數(shù)與同名覆蓋( override):如未加關(guān)鍵字virtual,則是普通的派生類中的新成員函數(shù)覆蓋基類同名成員函數(shù)(當(dāng)然參數(shù)表必須一樣,否則是重載),可稱為 同名覆蓋函數(shù) ,它 不能實(shí)現(xiàn)運(yùn)行時的多態(tài)性 。 虛函數(shù)定義要點(diǎn): 虛函數(shù)與運(yùn)行時的多態(tài)性: 【 例 】 計(jì)算學(xué)分。可由本科生類派生出研究生類,但它們各自的從課程學(xué)時數(shù)折算為學(xué)分?jǐn)?shù)的算法是不同的,本科生是 16個學(xué)時一學(xué)分,而研究生是 20個學(xué)時一學(xué)分。 虛函數(shù)的定義 【 例 】 計(jì)算學(xué)分。派生類定義不再重復(fù)。 成員函數(shù)設(shè)置為虛函數(shù)的要點(diǎn): 1. 派生類中定義虛函數(shù)必須與基類中的虛函數(shù)同名外,還必須同參數(shù)表,同返回類型。否則被認(rèn)為是重載,而不是虛函數(shù)。如 基類中返回基類指針,派生類中返回派生類指針是允許的 ,這是一個例外。 2. 只有類的成員函數(shù)才能說明為虛函數(shù)。這是因?yàn)樘摵瘮?shù)僅適用于有繼承關(guān)系的類對象。 3. 靜態(tài)成員函數(shù),是所有同一類對象共有,不受限于某個對象,不能作為虛函數(shù)。 4. 一個類對象的靜態(tài)和動態(tài)構(gòu)造是相同的, 實(shí)現(xiàn)動態(tài)多態(tài)性時,必須使用基類類型的指針變量或引用,使該指針指向該基類的不同派生類的對象,并通過該指針指向虛函數(shù),才能實(shí)現(xiàn)動態(tài)的多態(tài)性。 虛函數(shù)的定義 , 無映射關(guān)系,不能作為虛函數(shù)。 6. 析構(gòu)函數(shù)可定義為虛函數(shù),構(gòu)造函數(shù)不能定義虛函數(shù),因?yàn)樵谡{(diào)用構(gòu)造函數(shù)時對象還沒有完成實(shí)例化。 通常把析構(gòu)函數(shù)定義為虛函數(shù),實(shí)現(xiàn)撤消對象時的多態(tài)性。 7. 函數(shù)執(zhí)行速度要稍慢一些。為了實(shí)現(xiàn)多態(tài)性,每一個派生類中均要保存相應(yīng)虛函數(shù)的入口地址表,函數(shù)的調(diào)用機(jī)制也是間接實(shí)現(xiàn)。所以多態(tài)性總是要付出一定代價,但通用性是一個更高的目標(biāo)。 8. 如果定義放在類外, virtual只能加在函數(shù)聲明前面,不能(再)加在函數(shù)定義前面。正確的定義必須不包括virtual。 虛函數(shù)的定義 虛函數(shù)的定義 【 例 】 根據(jù)賦值兼容規(guī)則可以用基類的指針指向派 生類對象,如果由該指針撤銷派生類對象,則必須將析構(gòu)函數(shù)說明為虛函數(shù),實(shí)現(xiàn)多態(tài)性,自動調(diào)用派生類析構(gòu)函數(shù)。 通常 要求將類設(shè)計(jì)成通用的 ,無論其他程序員怎樣調(diào)用都必須保證不出錯,所以 必須把析構(gòu)函數(shù)定義為虛函數(shù) 。 下面把 【 例 】 析構(gòu)函數(shù)改造為虛函數(shù) class Person{ //數(shù)據(jù)成員略 public: virtual ~Person()。 //只需在此聲明一次 ,派生類的析構(gòu)函數(shù)全為虛函數(shù) }。 //其他成員函數(shù)略 Person *pper4。 Student *pstu4=new Student。 //pstu4指向動態(tài)建立的 student類對象 *pstu4=stu1。 //把 stu1的數(shù)據(jù)拷入 pstu4指向的對象 pstu4PrintStudentInfo()。 pper4=pstu4。 delete pper4。 //用基類指針撤銷派生類,動態(tài)生成的對象必須顯式撤銷 虛函數(shù)的定義 在主函數(shù)中添加以下內(nèi)容: 通過在析構(gòu)函數(shù)中加顯示語句發(fā)現(xiàn)先調(diào) Student析構(gòu)函數(shù),后調(diào) Person析構(gòu)函數(shù)。 這里再次強(qiáng)調(diào) 動態(tài)生成的對象必須顯式撤銷 。 純虛函數(shù): 純虛函數(shù) ( pure virtual function)是指被標(biāo)明為不具體實(shí)現(xiàn)的虛擬成員函數(shù)。它用于這樣的情況:定義一個基類時,會遇到無法定義基類中虛函數(shù)的具體實(shí)現(xiàn),其實(shí)現(xiàn)依賴于不同的派生類。 純虛函數(shù) 純虛函數(shù)的定義: virtual 返回類型 函數(shù)名(參數(shù)表) =0; 含有純虛函數(shù)的基類是不能用來定義對象的。純虛函數(shù)沒有實(shí)現(xiàn)部分,不能產(chǎn)生對象,所以含有純虛函數(shù)的類是 抽象類 。 1 定義純虛函數(shù)時,不能定義虛函數(shù)的實(shí)現(xiàn)部分。即使是函數(shù)體為空也不可以,函數(shù)體為空就可以執(zhí)行,只是什么也不做就返回。但根本不能調(diào)用純虛函數(shù)。 2 “=0”表明程序員將不定義該函數(shù),函數(shù)聲明是為派生類保留一個位置。 “ =0”本質(zhì)上是將指向函數(shù)體的指針定為 NULL。 3 在派生類中必須有重新定義的純虛函數(shù)的函數(shù)體,這樣的派生類才能用來定義對象。 純虛函數(shù) 定義純虛函數(shù)的要點(diǎn): 【 例 】 學(xué)校對在冊人員進(jìn)行獎勵,依據(jù)是業(yè)績分,但是 業(yè)績分的計(jì)算方法只能對具體人員進(jìn)行 ,如學(xué)生,教師,行政人員,工人,算法都不同,所以可以將在冊人員類作為一個抽象類, 業(yè)績計(jì)算方法作為一個純虛函數(shù) 。 在主函數(shù)中全部用指向基類的指針來調(diào)用 純虛函數(shù) 業(yè)績分 基類定義 業(yè)績分 學(xué)生派生類定義 業(yè)績分 教師派生類定義 驗(yàn)證 主函數(shù) 【 例 】 用 虛函數(shù) 來實(shí)現(xiàn) 辛普生 法求函數(shù)的定積分。 純虛函數(shù) 純虛 函數(shù)實(shí)現(xiàn) 通用算法 : 辛普生法求 定積分類 在派生類中加 被積函數(shù) : 驗(yàn)證 主函數(shù) 繼承與多態(tài)的應(yīng)用 ——單鏈表派生類(選讀) 【 例 】 通用單鏈表派生類 。 第一步 改造 【 例 】的頭文件,不 采用模板類,而采用虛函數(shù)實(shí)現(xiàn)多態(tài)性,達(dá)到通用的目的 。結(jié)點(diǎn)類數(shù)據(jù)域被改造為指針,而把數(shù)據(jù)放在一個抽象類中,由指針與之建立聯(lián)系。 數(shù)據(jù)域 (指向抽象 數(shù)據(jù)類的指 針) 由抽象類派 生的數(shù)據(jù)類 對象(如串 對象) 指針域(指 向下一結(jié) 點(diǎn)) 結(jié)點(diǎn)類對象 動態(tài)建立的 數(shù)據(jù)類對象 圖 結(jié)點(diǎn)構(gòu)造 class Object{ //數(shù)據(jù)類為抽象類 public: Object(){} virtual bool operator(Object amp。)=0。 //純虛函數(shù) ,參數(shù)必須為引用或指針 virtual bool operator!=(Object amp。)=0。 //純虛函數(shù) ,參數(shù)必須為引用或指針 virtual void Print()=0。 //純虛函數(shù) virtual ~Object(){} }。 //析構(gòu)函數(shù)可為虛函數(shù),構(gòu)造函數(shù)不行 繼承與多態(tài)的應(yīng)用 ——單鏈表派生類(選讀) 結(jié)點(diǎn)組織,采用結(jié)點(diǎn)類加數(shù)據(jù)類 數(shù)據(jù)類定義 : 本題要點(diǎn): 采用虛函數(shù)實(shí)現(xiàn)多態(tài)性,達(dá)到通用的目的。 堆內(nèi)存的分配與釋放,關(guān)鍵不是創(chuàng)建,而是釋放! 說明: 數(shù)據(jù)抽象類中含有三個純虛函數(shù):輸出函數(shù)和兩個比較函數(shù)。當(dāng)抽象類在派生時重新定義三個純虛函數(shù),可以進(jìn)行各種類型,包括類和結(jié)構(gòu)對象的比較和輸出 。 本例介紹程序總體組成為主,鏈表的操作由學(xué)生自己 仔細(xì) 閱讀。 繼承與多態(tài)的應(yīng)用 ——單鏈表派生類(選讀) 抽象類中的 析構(gòu)函數(shù)也是虛函數(shù),這一點(diǎn)非常重要。當(dāng)由結(jié)點(diǎn)類指向抽象基類的指針刪除釋放動態(tài)分配的由抽象類派生的數(shù)據(jù)類對象時,必須由數(shù)據(jù)類自定義的虛析構(gòu)函數(shù)來釋放該類對象數(shù)據(jù)部分占用內(nèi)存。 Class Node{ Object* info。 //數(shù)據(jù)域用指針指向數(shù)據(jù)類對象 Node* link。 //指針域 public: Node()。 //生成頭結(jié)點(diǎn)的 構(gòu)造函數(shù) ~Node(); //析構(gòu)函數(shù) void InsertAfter(Node* P)。 //在當(dāng)前結(jié)點(diǎn)后插入一個結(jié)點(diǎn) Node* RemoveAfter()。 //刪除當(dāng)前結(jié)點(diǎn)的后繼結(jié)點(diǎn),返回該結(jié)點(diǎn)備用 void Linkinfo(Object* obj)。 //把 數(shù)據(jù)對象連接到結(jié)點(diǎn) friend class List。 //以 List為友元類, List可直接訪問 Node的私有函數(shù), }。 繼承與多態(tài)的應(yīng)用 ——單鏈表派生類(選讀) 結(jié)點(diǎn)類定義 : class List{ Node *head,*tail。 //鏈表頭指針和尾指針 public: List()。 //構(gòu)造函數(shù) ,生成頭結(jié)點(diǎn) (空鏈表 ) ~List()。 //析構(gòu)函數(shù) void MakeEmpty()。 //清空鏈表 ,只余表頭結(jié)點(diǎn) Node* Find(Object amp。 obj)。 //搜索數(shù)據(jù)域與定值相同的結(jié)點(diǎn) ,返回該結(jié)點(diǎn)的地址 int Length()。 //計(jì)算單鏈表長度 void PrintList()。 //打印鏈表的數(shù)據(jù)域 void InsertFront(Node* p)。 //可用來向前生成鏈表 void InsertRear(Node* p)。 //可用來向后生成鏈表 void InsertOrder(Node* p)。 //按 升序生成鏈表 Node* CreatNode()。 //創(chuàng)建一個結(jié)點(diǎn) (孤立結(jié)點(diǎn) ) Node* DeleteNode(Node* p)。 }。 //刪除指定結(jié)點(diǎn) 繼承與多
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1