歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

《面向?qū)ο蟪绦蛟O計》教案.doc

  • 資源ID:8937831       資源大?。?span id="t5x0n5e" class="font-tahoma">360.50KB        全文頁數(shù):104頁
  • 資源格式: DOC        下載積分:14.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

《面向?qū)ο蟪绦蛟O計》教案.doc

教 案分 院 (部) 信息學院 教 研 室 計算機科學與技術課 程 名 稱 面向?qū)ο蟪绦蛟O計教 師 姓 名 金淑娟 職 稱 講 師 使 用 教 材 C+語言程序設計 教 務 處 制授課內(nèi)容:第一章 面向?qū)ο蟪绦蛟O計概念授課時數(shù)6教學目的及要求:了解:程序設計方法的發(fā)展過程,面向?qū)ο笳Z言的特點。掌握:面向?qū)ο蟮母拍睿嫦驅(qū)ο蟮某绦蜷_發(fā)過程。教學基本內(nèi)容:程序設計方法的發(fā)展過程;面向?qū)ο蟪绦蛟O計的基本思想及概念,面向?qū)ο蟪绦蛟O計的要點及開發(fā)過程。重點及難點:面向?qū)ο蟮母拍?,面向?qū)ο蟮某绦蜷_發(fā)過程。教學方法:講授法 討論法 自學指導法 其他 教學手段:多媒體 實物 模型 掛圖 音像 其他板書設計:討論、思考題、作業(yè):1 敘述面向?qū)ο蠡舅枷氲奶攸c。2 敘述面向?qū)ο蟮某绦蛟O計方法與傳統(tǒng)面向過程的程序設計方法有何不同。3 什么是類,什么是對象,類和對象是怎樣的關系?4 抽象包括哪兩方面的含義?5 什么是封裝,它具有怎樣的特點?6 什么是多態(tài)?多態(tài)的實現(xiàn)方式及作用有哪些?7 什么叫對象的封裝性?什么叫信息隱藏?C+語言是怎樣實現(xiàn)信息隱藏的?8 什么叫繼承?什么叫派生?9 什么叫多態(tài)性?多態(tài)性主要有哪幾種?10. 什么叫運行時的多態(tài)性?C+語言中是怎樣實現(xiàn)運行時的多態(tài)性的?參考資料(含參考書目、文獻等):1、Harvey M.Deitel及Paul James Deitel著,C+大學教程(第三版),電子工業(yè)出版社。2、劉正林,面向?qū)ο蟪绦蛟O計,華中科技大學出版社。3、周生炳等,面向?qū)ο蟪绦蛟O計,清華大學出版社。4、揣錦華,面向?qū)ο蟪绦蛟O計與VC+實踐,西安電子科技大學出版社。5、王育堅編,面向?qū)ο缶幊探坛? 清華大學出版社。6、王萍編著,C+面向?qū)ο蟪绦蛟O計, 清華大學出版社出版。7、徐孝凱等編,面向?qū)ο蟪绦蛟O計實驗, 中央廣播電視大學出版社出版。 第一節(jié) 面向?qū)ο蟮姆椒ㄒ弧⒚嫦驅(qū)ο蟮恼Z言出發(fā)點:更直接地描述客觀世界中存在的事物(對象)以及它們之間的關系。特點:是高級語言。將客觀事物看作具有屬性和行為的對象。通過抽象找出同一類對象的共同屬性和行為,形成類。通過類的繼承與多態(tài)實現(xiàn)代碼重用。優(yōu)點:使程序能夠比較直接地反問題域的本來面目,軟件開發(fā)人員能夠利用人類認識事物所采用的一般思維方法來進行軟件開發(fā)。二、程序設計方法的發(fā)展歷程1面向過程的程序設計方法程序的目的:用于數(shù)學計算。主要工作:設計求解問題的過程。缺點:對于龐大、復雜的程序難以開發(fā)和維護。2面向過程的結構化程序設計方法設計思路:自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結構:按功能劃分為若干個基本模塊,形成一個樹狀結構。各模塊間的關系盡可能簡單,功能上相對獨立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結構組成。其模塊化實現(xiàn)的具體方法是使用子程序。優(yōu)點:有效地將一個較復雜的程序系統(tǒng)設計任務分解成許多易于控制和處理的子任務,便于開發(fā)和維護。缺點:可重用性差、數(shù)據(jù)安全性差、難以開發(fā)大型軟件和圖形界面的應用軟件。具體有以下幾點: 把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨立的實體。 當數(shù)據(jù)結構改變時,所有相關的處理過程都要進行相應的修改。 每一種相對于老問題的新方法都要帶來額外的開銷,程序的可重用性差。 圖形用戶界面的應用程序,很難用過程來描述和實現(xiàn),開發(fā)和維護也都很困難。3面向?qū)ο蟮姆椒?方法: 將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體對象。 對同類型對象抽象出其共性,形成類。 類通過一個簡單的外部接口,與外界發(fā)生關系。 對象與對象之間通過消息進行通訊。優(yōu)點: 程序模塊間的關系更為簡單,程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。 通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護都更為方便。 三、面向?qū)ο蟮幕靖拍?一般意義上的對象: 是現(xiàn)實世界中一個實際存在的事物。 可以是有形的(比如一輛汽車),也可以是無形的(比如一項計劃)。 是構成世界的一個獨立單位,具有: 靜態(tài)特征-可以用某種數(shù)據(jù)來描述 動態(tài)特征-對象所表現(xiàn)的行為或具有的功能2 面向?qū)ο蠓椒ㄖ械膶ο螅?是系統(tǒng)中用來描述客觀事物的一個實體,它是用來構成系統(tǒng)的一個基本單位。對象由一組屬性和一組行為構成。 屬性-用來描述對象靜態(tài)特征的數(shù)據(jù)項。 行為-用來描述對象動態(tài)特征的操作序列。3分類所依據(jù)的原則抽象 忽略事物的非本質(zhì)特征,只注意那些與當前目標有關的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。例如,石頭、樹木、汽車、分類人類通常的思維方法。 房屋等都是人們在長期的生產(chǎn)和生活實踐中抽象出的概念。4面向?qū)ο蠓椒ㄖ械?quot;類" 具有相同屬性和服務的一組對象的集合。 為屬于該類的全部對象提供了抽象的描述,包括屬性和行為兩個主要部分。 類與對象的關系:猶如模具與鑄件之間的關系,一個屬于某類的對象稱為該類的一個實例。5 面向?qū)ο蠓椒ㄖ械?quot;封裝" 把對象的屬性和服務結合成一個獨立的系統(tǒng)單元。 盡可能隱蔽對象的內(nèi)部細節(jié)。對外形成一個邊界(或者說一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。6面向?qū)ο蠓椒ㄖ械?quot;繼承" 繼承對于軟件復用有著重要意義,是面向?qū)ο蠹夹g能夠提高軟件開發(fā)效率的重要原因之一。 定義:特殊類的對象擁有其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。例如:將輪船作為一個一般類,客輪便是一個特殊類。7 面向?qū)ο蠓椒ㄖ械?quot;多態(tài)性" 多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義。例如:數(shù)的加法->實數(shù)的加法->復數(shù)的加法第二節(jié) 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖こ蹋ㄜ浖_發(fā))是面向?qū)ο蠓椒ㄔ谲浖こ填I域的全面應用。它包括: 面向?qū)ο蟮姆治觯∣OA) 面向?qū)ο蟮脑O計(OOD) 面向?qū)ο蟮木幊蹋∣OP) 面向?qū)ο蟮臏y試(OOT) 面向?qū)ο蟮能浖S護(OOSM)一、系統(tǒng)分析 系統(tǒng)分析階段應該扼要精確地抽象出系統(tǒng)必須做什么,但是不關心如何去實現(xiàn)。 面向?qū)ο蟮南到y(tǒng)分析,直接用問題域中客觀存在的事物建立模型中的對象,對單個事物及事物之間的關系,都保留他們的原貌,不做轉換,也不打破原有界限而重新組合,因此能夠很好地映射客觀事物。二、設計 針對系統(tǒng)的一個具體實現(xiàn)運用面向?qū)ο蟮姆椒?。其中包括兩方面的工作?把OOA模型直接搬到OOD,作為OOD的一部分。 針對具體實現(xiàn)中的人機界面、數(shù)據(jù)存儲、任務管理等因素補充一些與實現(xiàn)有關的部分。 三、編程OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個成分書寫出來,是面向?qū)ο蟮能浖_發(fā)最終落實的重要階段。四、測試 測試的任務是發(fā)現(xiàn)軟件中的錯誤。 在面向?qū)ο蟮能浖y試中繼續(xù)運用面向?qū)ο蟮母拍钆c原則來組織測試,以對象的類作為基本測試單位,可以更準確的發(fā)現(xiàn)程序錯誤并提高測試效率。 五、維護將軟件交付使用后,工作并沒有完結,還要根據(jù)軟件的運行情況和用戶需求,不 斷改進系統(tǒng)。使用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件,其程序與問題域是一致的,因此,在維護階段運用面向?qū)ο蟮姆椒梢源蟠筇岣哕浖S護的效率。 授課內(nèi)容:第二章 類與對象授課時數(shù)18教學目的及要求:掌握:類定義的方法和存取級別。 掌握:類的成員變量和成員函數(shù)的定義和使用,以及對象的定義。 了解:友元函數(shù)和友元類。 掌握:構造函數(shù)和析構函數(shù)。 掌握:靜態(tài)類成員變量和成員函數(shù)的定義和使用方法。 掌握:內(nèi)聯(lián)函數(shù)的定義和使用方法。 掌握:對象指針及對象引用的使用。 了解:容器類的定義。 掌握:在函數(shù)中對象傳遞的機制。教學基本內(nèi)容: 類的聲明,對象的定義,構造函數(shù)、析構函數(shù),對象指針,對象引用,靜態(tài)成員,友元,標識符的作用域,對象數(shù)組,成員對象,對象的存儲類等。重點與難點: 類及類對象的定義,構造函數(shù)、析構函數(shù)的定義,對象指針及對象引用的使用,容器類的定義。教學方法:講授法 討論法 自學指導法 其他 教學手段:多媒體 實物 模型 掛圖 音像 其他板書設計:討論、思考題:1. 什么是類,什么是對象,類和對象是怎樣的關系?2敘述靜態(tài)成員和一般成員的區(qū)別。3什么叫友元? 什么叫友元類?什么叫友元函數(shù)?什么叫友元成員函數(shù)? 4敘述友元與類的封裝性之間的關系。5友元方法有什么優(yōu)點?有什么缺點?作業(yè):見書中第四章練習參考資料(含參考書目、文獻等):1、Harvey M.Deitel及Paul James Deitel著,C+大學教程(第三版),電子工業(yè)出版社。2、劉正林,面向?qū)ο蟪绦蛟O計,華中科技大學出版社。3、周生炳等,面向?qū)ο蟪绦蛟O計,清華大學出版社。4、揣錦華,面向?qū)ο蟪绦蛟O計與VC+實踐,西安電子科技大學出版社。5、王育堅編,面向?qū)ο缶幊探坛? 清華大學出版社。6、王萍編著,C+面向?qū)ο蟪绦蛟O計, 清華大學出版社出版。7、徐孝凱等編,面向?qū)ο蟪绦蛟O計實驗, 中央廣播電視大學出版社出版。第一節(jié) C+的面向?qū)ο蟮母拍钜?、抽象的概念抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。 先注意問題的本質(zhì)及描述,其次是實現(xiàn)過程或細節(jié)。 數(shù)據(jù)抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。 代碼抽象:描述某類對象的共有的行為特征或具有的功能。 抽象的實現(xiàn):通過類的聲明。二、抽象實例1日期 抽象實例 數(shù)據(jù)抽象:int Year, int Month, int Day 代碼抽象:SetDate(), /設置年、月、日IsLeapYear(),/計算某年是否為閏年ShowDate(),/顯示年、月、日的值抽象實例日期類class Datepublic: void SetDate(int y, int m, int d); int IsLeapDate();void ShowDate();private: int Year,Month,Day; 2鐘表 抽象實例-鐘表 數(shù)據(jù)抽象:int Hour, int Minute, int Second代碼抽象:SetTime(), ShowTime()抽象實例鐘表類class Clock public: void SetTime(int NewH, int New, int NewS); void ShowTime();private: int Hour,Minute,Second; 3抽象實例人數(shù)據(jù)抽象:char *name,char *gender,int age,int id代碼抽象:生物屬性角度:GetCloth(), Eat(), Step(),社會屬性角度:Work(), Promote() ,二、封裝將抽象出的數(shù)據(jù)成員、代碼成員相結合,將它們視為一個整體。 目的是曾強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只需要通過外部接口,以特定的訪問權限,來使用類的成員。 實現(xiàn)封裝:類聲明中的實例:class Clockpublic: void SetTime(int NewH, int NewM, int NewS); void ShowTime();private:int Hour,Minute,Second;三、繼承與派生是C+中支持層次分類的一種機制,允許程序員在保持原有類特性的基礎上,進行更具體的說明。實現(xiàn):聲明派生類第七章四、多態(tài)性 多態(tài):同一名稱,不同的功能實現(xiàn)方式。 目的:達到行為標識統(tǒng)一,減少程序中標識符的個數(shù)。 實現(xiàn):重載函數(shù)和虛函數(shù)第八章五、c+中的類 類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個主要部分。 利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。 利用類易于編寫大型復雜程序,其模塊化程度比C中采用函數(shù)更高。第二節(jié) 類的定義格式一、類的聲明類是一種用戶自定義類型,聲明形式:class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員;(1)類的定義格式分為說明部分和實現(xiàn)部分,說明部分用來描述該類中的成員,包括數(shù)據(jù)成員和成員函數(shù),成員函數(shù)使用來對數(shù)據(jù)成員進行操作的即“方法”,實現(xiàn)部分用來定義各種成員函數(shù),描述這些成員函數(shù)如何實現(xiàn)隊數(shù)據(jù)成員的操作。(2)類由類頭和類體兩部分組成。類頭由關鍵字class和類名組成,類名是由用戶定義的標識符,類頭用來向便宜系統(tǒng)聲明定義了一個新的class類型;而類體是對類的組織形式進行具體的描述,它由訪問限制符(private,protected,public)、數(shù)據(jù)成員和成員函數(shù)組成,整個類體用一對大括號括起來,完整地表達對類的描述。(3)class允許隱藏內(nèi)部成員,它依靠類定義中的3個訪問限制符publicprivateprotected來確定隱藏的程度,它們將類體分成3 個大部分。(4)類的定義只是定義了某種類的組織形式,類似于結構體的定義,編譯系統(tǒng)并不給class類型的每個數(shù)據(jù)成員分配具體的內(nèi)存空間。二、類成員的訪問控制3個訪問限制符將類體分成3個大部分,每一部分都可以有數(shù)據(jù)成員和成員函數(shù),也可以只有數(shù)據(jù)成員或只有成員函數(shù),但不同的訪問限制符規(guī)定了該部分所具有的訪問權限。1Public(公有類型的成員) 在關鍵字public后面聲明,這一部分是透明的,它的數(shù)據(jù)成員和成員函數(shù)是開放的,即可以由本類的成員函數(shù)直接訪問,也可以由任何外部函數(shù)來訪問,它們是類與外部的接口。外部訪問是通過“對象名.公有成員名”進行。2Private(私有類型的成員)在關鍵字private后面聲明,這一部分象一個黑盒子,完全隱藏的。它只允許本類中的成員函數(shù)直接訪問(既在成員函數(shù)體內(nèi)直呼其名寫出成員名),象日期類Date的SetDate( )成員函數(shù)體內(nèi),可以直接寫“year=y;month=m,day=d;”等語句;而類外部的任何函數(shù)都不能訪問。如不允許編寫成”對象名.私有成員名“形式。如果緊跟在類名稱的后面聲明私有成員,則關鍵字private可以省略。3Protected(保護類型成員)這一部分是半透明的,與private類似,其差別表現(xiàn)在繼承與派生時對派生類的影響不同。它可由本類成員函數(shù)或它的派生類成員函數(shù)直接訪問,而其它的函數(shù)不允許訪問此部分。三、數(shù)據(jù)成員與一般的變量聲明相同,但需要將它放在類的聲明體中。class Clockpublic: void SetTime(int NewH, int NewM, int NewS);/聲明設置時鐘的成員函數(shù) void ShowTime();/聲明顯示時鐘的成員函數(shù)private: int Hour, Minute, Second;void Clock : SetTime(int NewH, int NewM, int NewS) /設置時鐘的成員函數(shù)在類體外的實現(xiàn) Hour=NewH; Minute=NewM; Second=NewS;void Clock : ShowTime() /顯示時鐘的成員函數(shù)在類體外的實現(xiàn) cout<<Hour<<":"<<Minute<<":"<<Second; 通常,總是將數(shù)據(jù)成員指定為私有的,以實現(xiàn)數(shù)據(jù)隱藏,這些數(shù)據(jù)成員用來描述該類對象的屬性,編程者無法直接訪問它們而隱藏起來。四、成員函數(shù) 1)成員函數(shù)說明 在類中說明原形,可以在類外給出函數(shù)體實現(xiàn),并在函數(shù)名前使用類名加以限定。也可以直接在類中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。 允許聲明重載函數(shù)和帶默認形參值的函數(shù)。(見上面例子中成員函數(shù)的定義) 2)內(nèi)聯(lián)成員函數(shù) 為了提高運行時的效率,對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。 內(nèi)聯(lián)函數(shù)體中不要有復雜結構(如循環(huán)語句和switch語句)。 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式: 將函數(shù)體放在類的聲明中。 使用inline關鍵字。舉例1:class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() return X; int GetY() return Y; private: int X,Y;舉例2class Point public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline int Point:GetY() return Y;一般將成員函數(shù)指定為公有的,作為該類對象訪問私有數(shù)據(jù)成員的一個接口界面,即對象訪問私有數(shù)據(jù)成員的一條消息通道提供給外界使用。因此,一個類的對象只能通過公有成員函數(shù)訪問它的私有數(shù)據(jù)成員,從而隱藏了處理這些數(shù)據(jù)的具體實現(xiàn)細節(jié),使得類對數(shù)據(jù)的描述和類提供給外界來處理數(shù)據(jù)的界面互相獨立,這就給出了面向?qū)ο蟮闹匾匦?。如日期類Date封裝在一個程序?qū)嶓w內(nèi)(定義日期類Date的程序代碼),將它的私有數(shù)據(jù)成員year ,month,day 等隱藏起來,不讓對象隨意訪問,對象要訪問這些私有數(shù)據(jù)成員,也只有通過公有的成員函數(shù)SetDate()、IsLeapYear()和PrintDate()等才能實現(xiàn)。舉例:Counter類用類定義一個計數(shù)器的抽象數(shù)據(jù)類型,計數(shù)器允許的取值范圍為04294967295的正整數(shù),可進行的操作是計數(shù)器加1、減1和讀計數(shù)器的值。數(shù)據(jù)抽象:int value;代碼抽象:Counter( );/給計數(shù)器賦初值 Increament( );/在計數(shù)器允許取值范圍內(nèi)對計數(shù)器加1 Decrement( );/ 在計數(shù)器允許取值范圍內(nèi)對計數(shù)器減1 ReadValue( );/讀計數(shù)器的值 Counter( );/撤消Counter類的對象程序?qū)崿F(xiàn):見jsj的11.2#include <第三節(jié) 對象的定義一、對象的定義格式類的對象是該類的某一特定實體,即類類型的變量。 聲明形式類名 對象名;例 Clock myClock; 訪問對象成員類中成員互訪:直接使用成員名。類外訪問:使用“對象名.成員名”方式訪問 public 屬性的成員。類應用舉例:#include<iostream>using namespace std;class Clock ./類的聲明略/.類的實現(xiàn)略int main() Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime();二、對象指針和對象引用的定義格式 1、對象指針 聲明形式類名 *對象指針名;例Point A(5,10);Piont *ptr;ptr=&A; 通過指針訪問對象成員對象指針名->成員名ptr->getx() 相當于 (*ptr).getx();對象指針應用舉例:int main() Point A(5,10); Point *ptr; ptr=&A; int x; x=ptr->GetX(); cout<<x<<endl; return 0; 2、對象引用( 聲明形式類名 &對象名=已存在的同類對象名;/給已有的對象另外取一個別名 例:Point A;Piont &B=A; 通過對象引用訪問對象成員使用“對象引用名.成員名”方式訪問 public屬性 的成員(與使用對象名.成員名方式訪問是等價的)。 舉例說明:#include<iostream>using namespace std;class Clock ./類的聲明略/.類的實現(xiàn)略int main() Clock Clock1; Clock &myClock=Clock1;/定義對象引用 myClock.SetTime(8,30,30);/等同于Clock1. etTime(8,30,30); myClock.ShowTime();/等同于Clock1. ShowTime();第四節(jié) 對象的初始化一、構造函數(shù) 1、構造函數(shù)說明構造函數(shù)的作用是在對象被創(chuàng)建時使用特定的值構造對象,或者說將對象初始化為一個特定的狀態(tài)。在對象創(chuàng)建時由系統(tǒng)自動調(diào)用。如果程序中未聲明,則系統(tǒng)自動產(chǎn)生出一個默認形式的構造函數(shù)允許為內(nèi)聯(lián)函數(shù)、重載函數(shù)、帶默認形參值的函數(shù)。構造函數(shù)舉例:class Clockpublic: Clock (int NewH, int NewM, int NewS);/構造函數(shù) void SetTime(int NewH, int NewM, int NewS); void ShowTime();private: int Hour,Minute,Second;構造函數(shù)的實現(xiàn):Clock:Clock(int NewH, int NewM, int NewS) Hour= NewH; Minute= NewM; Second= NewS;建立對象時構造函數(shù)的作用:int main() Clock c (0,0,0); /隱含調(diào)用構造函數(shù),將初始值作為實參。 c.ShowTime();2、復制構造函數(shù)(拷貝構造函數(shù))拷貝構造函數(shù)是一種特殊的構造函數(shù),其形參為本類的對象引用。class 類名 public : 類名(形參);/構造函數(shù) 類名(類名 &對象名);/拷貝構造函數(shù) .;類名: 類名(類名 &對象名)/拷貝構造函數(shù)的實現(xiàn) 函數(shù)體 拷貝構造函數(shù)舉例1:class Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point& p); int GetX() return X; int GetY() return Y; private: int X,Y;Point:Point (Point& p) X=p.X; Y=p.Y; cout<<"拷貝構造函數(shù)被調(diào)用"<<endl;復制構造函數(shù)舉例2:當用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用拷貝構造函數(shù)實現(xiàn)拷貝賦值。int main() Point A(1,2); Point B(A); /拷貝構造函數(shù)被調(diào)用 cout<<B.GetX()<<endl;復制構造函數(shù)舉例3:若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實參賦值給形參,系統(tǒng)自動調(diào)用拷貝構造函數(shù)。例如:void fun1(Point p) cout<<p.GetX()<<endl; int main() Point A(1,2); fun1(A); /調(diào)用拷貝構造函數(shù) 復制構造函數(shù)舉例4: 當函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構造函數(shù)。例如:Point fun2() Point A(1,2); return A; /調(diào)用拷貝構造函數(shù)int main() Point B; B=fun2(); 如果程序員沒有為類聲明拷貝初始化構造函數(shù),則編譯器自己生成一個拷貝構造函數(shù)。這個構造函數(shù)執(zhí)行的功能是:用作為初始值的對象的每個數(shù)據(jù)成員的值,初始化將要建立的對象的對應數(shù)據(jù)成員。二、析構函數(shù)完成對象被刪除前的一些清理工作。在對象的生存期結束的時刻系統(tǒng)自動調(diào)用它,然后再釋放此對象所屬的空間。如果程序中未聲明析構函數(shù),編譯器將自動產(chǎn)生一個默認的析構函數(shù)。 構造函數(shù)和析構函數(shù)舉例:#include<iostream>using namespace std;class Point public: Point(int xx,int yy); Point(); /.其它函數(shù)原形 private: int X,int Y;Point:Point(int xx,int yy) X=xx; Y=yy;Point:Point()/.其它函數(shù)的實現(xiàn)略類的應用舉例:一圓型游泳池如圖所示,現(xiàn)在需在其周圍建一圓型過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。#include <iostream>using namespace std;const float PI = 3.14159;const float FencePrice = 35;const float ConcretePrice = 20;/聲明類Circle 及其數(shù)據(jù)和方法class Circle private: float radius; public: Circle(float r); /構造函數(shù) float Circumference() const; /圓周長 float Area() const; /圓面積;/ 類的實現(xiàn)/ 構造函數(shù)初始化數(shù)據(jù)成員radiusCircle:Circle(float r)radius=r/ 計算圓的周長float Circle:Circumference() const return 2 * PI * radius;/ 計算圓的面積 float Circle:Area() const return PI * radius * radius;void main () float radius; float FenceCost, ConcreteCost; / 提示用戶輸入半徑 cout<<"Enter the radius of the pool: " cin>>radius; / 聲明 Circle 對象 Circle Pool(radius); Circle PoolRim(radius + 3); / 計算柵欄造價并輸出 FenceCost = PoolRim.Circumference() * FencePrice; cout << "Fencing Cost is ¥" << FenceCost << endl; / 計算過道造價并輸出 ConcreteCost = (PoolRim.Area() - Pool.Area()*ConcretePrice; cout << "Concrete Cost is ¥" << ConcreteCost << endl;運行結果Enter the radius of the pool: 10Fencing Cost is ¥2858.85Concrete Cost is ¥4335.39第五節(jié) 對象指針和對象引用的應用一、對象指針作為函數(shù)的參數(shù)二、對象引用做函數(shù)的參數(shù)三、This指針 1、This指針說明 隱含于每一個類的成員函數(shù)中的特殊指針。 明確地指出了成員函數(shù)當前所操作的數(shù)據(jù)所屬的對象。 當通過一個對象調(diào)用成員函數(shù)時,系統(tǒng)先將該對象的地址賦給this指針,然后調(diào)用成員函數(shù),成員函數(shù)對對象的數(shù)據(jù)成員進行操作時,就隱含使用了this指針。例如:Point類的構造函數(shù)體中的語句:X=xx;Y=yy; 相當于:this->X=xx;this->Y=yy; 2、指向類的非靜態(tài)成員的指針通過指向成員的指針只能訪問公有成員。1)聲明指向成員的指針聲明指向公有數(shù)據(jù)成員的指針。類型說明符 類名:*指針名;聲明指向公有函數(shù)成員的指針)類型說明符 (類名:*指針名)(參數(shù)表);指向數(shù)據(jù)成員的指針(說明指針應該指向哪個成員)指針名=&類名:數(shù)據(jù)成員名;2)通過對象名(或?qū)ο笾羔槪┡c成員指針結合來訪問數(shù)據(jù)成員對象名.* 類成員指針名或: 對象指針名>*類成員指針名 指向函數(shù)成員的指針初始化指針名=類名:函數(shù)成員名;3)通過對象名(或?qū)ο笾羔槪┡c成員指針結合來訪問函數(shù)成員(對象名.* 類成員指針名)(參數(shù)表)或:(對象指針名>*類成員指針名)(參數(shù)表)舉例說明:訪問對象的公有成員函數(shù)的不同方式int main()/主函數(shù)Point A(4,5);/聲明對象APoint *p1=&A;/聲明對象指針并初始化 /聲明成員函數(shù)指針并初始化int (Point:*p_GetX)()=Point:GetX; /(1)使用成員函數(shù)指針訪問成員函數(shù)cout<<(A.*p_GetX)()<<endl; /(2)使用對象指針訪問成員函數(shù)cout<<(p1->GetX)()<<endl; /(3)使用對象名訪問成員函數(shù) cout<<A.GetX()<<endl; 3、指向類的靜態(tài)成員的指針 對類的靜態(tài)成員的訪問不依賴于對象 可以用普通的指針來指向和訪問靜態(tài)成員例6-14通過指針訪問類的靜態(tài)數(shù)據(jù)成員#include <iostream>using namespace std;class Point/Point類聲明public:/外部接口Point(int xx=0, int yy=0) X=xx;Y=yy;countP+;/構造函數(shù)Point(Point &p);/拷貝構造函數(shù)int GetX() return X;int GetY() return Y;static int countP;/靜態(tài)數(shù)據(jù)成員引用性說明private:/私有數(shù)據(jù)成員int X,Y;Point:Point(Point &p)X=p.X; Y=p.Y; countP+; int Point:countP=0;/靜態(tài)數(shù)據(jù)成員定義性說明int main()/主函數(shù) /聲明一個int型指針,指向類的靜態(tài)成員int *count=&Point:countP; Point A(4,5);/聲明對象Acout<<"Point A,"<<A.GetX()<<","<<A.GetY(); /直接通過指針訪問靜態(tài)數(shù)據(jù)成員cout<<" Object id="<<*count<<endl;Point B(A);/聲明對象Bcout<<"Point B,"<<B.GetX() <<","<<B.GetY(); /直接通過指針訪問靜態(tài)數(shù)據(jù)成員cout<<" Object id="<<*count<<endl; 例6-15通過指針訪問類的靜態(tài)函數(shù)成員#include <iostream>using namespace std;class Point/Point類聲明 public:/外部接口/其它函數(shù)略static void GetC() /靜態(tài)函數(shù)成員 cout<<" Object id="<<countP<<endl; private:/私有數(shù)據(jù)成員int X,Y;static int countP;/靜態(tài)數(shù)據(jù)成員引用性說明;/ 函數(shù)實現(xiàn)略int Point:countP=0;/靜態(tài)數(shù)據(jù)成員定義性說明int main()/主函數(shù) /指向函數(shù)的指針,指向類的靜態(tài)成員函數(shù)void (*gc)()=Point:GetC;Point A(4,5);/聲明對象Acout<<"Point A,"<<A.GetX()<<","<<A.GetY();gc(); /輸出對象序號,通過指針訪問靜態(tài)函數(shù)成員Point B(A);/聲明對象Bcout<<"Point B,"<<B.GetX()<<","<<B.GetY();gc(); /輸出對象序號,通過指針訪問靜態(tài)函數(shù)成員四、遞歸類第六節(jié) 動態(tài)內(nèi)存分配一、動態(tài)申請內(nèi)存操作符 new new 類型名T(初值列表)功能:在程序執(zhí)行期間,申請用于存放T類型對象的內(nèi)存空間,并依初值列表賦以初值。結果值:成功:T類型的指針,指向新分配的內(nèi)存。失敗:0(NULL)二、釋放內(nèi)存操作符delete delete 指針P功能:釋放指針P所指向的內(nèi)存。P必須是new操作的返回值。例6-16 動態(tài)創(chuàng)建對象舉例#include<iostream>using namespace std;class Point public: Point() X=Y=0; cout<<"Default Constructor called.n" Point(int xx,int yy) X=xx; Y=yy; cout<< "Constructor called.n" Point() cout<<"Destructor called.n" int GetX() return X; int GetY() return Y; void Move(int x,int y) X=x; Y=y; private: int X,Y;int main() cout<<"Step One:"<<endl; Point *Ptr1=new Point; delete Ptr1; cout<<"Step Two:"<<endl; Ptr1=new Point(1,2); delete Ptr1; return 0;運行結果:Step One:Default Constructor called.Destructor called.Step Two:Constructor called.Destructor called.三、淺拷貝與深拷貝 淺拷貝 實現(xiàn)對象間數(shù)據(jù)元素的一一對應復制。 深拷貝 當被復制的對象數(shù)據(jù)成員是指針類型時,不是復制該指針成員本身,而是將指針所指的對象進行復制。 例6-20對象的淺拷貝 #include<iostream>using namespace std;class Point /類的聲明同例6-16 /;class ArrayOfPoints /類的聲明同例6-18 /;int main()int number;cin>>number; ArrayOFPoints pointsArray1(number); pointsArray1.Element(0).Move(5,10); pointsArray1.Element(1).Move(15,20); ArrayOfPoints pointsArray2(pointsArray1); cout<<"Copy of pointsArray1:"<<endl; cout<<"Point_0 of array2: " <<pointsArray2.Element(0).GetX() <<", "<<pointsArray2.Element(0).GetY()<<endl; cout<<"Point_1 of array2: " <<pointsArray2.Element(1).GetX() <<", "<<pointsArray2.Element(1).GetY()<<endl;pointsArray1.Element(0).Move(25,30); pointsArray1.Element(1).Move(35,40); cout<<"After the moving of pointsArray1:"<<endl; cout<<"Point_0 of array2: "<<pointsArray2.Element(0).GetX() <<", "<<pointsArray2.Element(0).GetY()<<endl; cout<<"Point_1 of array2: "<<pointsArray2.Element(1).GetX() <<", "<<pointsArray2.Element(1).GetY()<<endl;運行結果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Copy of pointsArray1:Point_0 of array2: 5, 10Point_1 of array2: 15, 20After the moving of pointsArray1:Point_0 of array2: 25, 30Point_1 of array2: 35, 40Deleting.Destructor called.Destructor called.Deleting.接下來程序出現(xiàn)異常,也就是運行錯誤。用圖說明淺拷貝(見電子課件) 例6-21對象的深拷貝 #include<iostream>using namespace std;class Point /類的聲明同例6-16 ;class ArrayOfPoints public: ArrayOfPoints(ArrayOfPoints& pointsArray); /其它成員同例6-18 ;ArrayOfPoints :ArrayOfPoints(ArrayOfPoints& pointsArray) numberOfPoints =pointsArray.numberOfPoints; points=new PointnumberOfPoints; for (int i=0; i<numberOfPoints; i+) pointsi.Move(pointsArray.Element(i).GetX(), pointsArray.Element(i).GetY();int main() /同例6-20 程序的運行結果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Default Constructor called.Default Constructor called.Copy of pointsArray1:Point_0 of array2: 5, 10Point_1 of array2: 15, 20After the moving of pointsArray1:Point_0 of array2: 5, 10Point_1 of array2: 15, 20Deleting.Destructor called.Destructor called.Deleting.Destructor called.Destructor called. 用圖說明(見電子課件)第七節(jié) 靜態(tài)成員一、靜態(tài)數(shù)據(jù)成員 靜態(tài)數(shù)據(jù)成員 用關鍵字static聲明 該類的所有對象維護該成員的同一個拷貝 必須在類外定義和初始化,用(:)來指明所屬的類。 舉例:具有靜態(tài)數(shù)據(jù)成員的Point類#include <iostream>using namespace std;class Pointpublic: Point(int xx=0, int yy=0) X=xx; Y=yy; countP+; Point(Point &p); int GetX() return X; int GetY() return Y; void GetC() cout<<" Object id="<<countP<<endl;private: int X,Y; static int countP;Point:Point(Point &p)X=p.X;Y=p.Y;countP+;int Point:countP=0; int main()Point A(4,5);cout<<"Point A,"<<A.GetX()<<","<<A.GetY();A.GetC();Point B(A);cout<<"Point B,"<<B.GetX()<<","<<B.GetY();B.GetC();二、靜態(tài)成員函數(shù) 靜態(tài)成員函數(shù) 類外代碼可以使用類名和作用域操作符來調(diào)用靜態(tài)成員函數(shù)。 靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。 靜態(tài)成員函數(shù)舉例1: #include<iostream>using namespace std;class Application public

注意事項

本文(《面向?qū)ο蟪绦蛟O計》教案.doc)為本站會員(wux****ua)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!