




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、分教課教職使院(部)研 室程名 稱師 姓名稱用教材教 案信息學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)金淑娟講師C+語言程序設(shè)計(jì)教務(wù)處制授課內(nèi)容:第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概念授課時(shí)數(shù)6教學(xué)目的及要求:了解:程序設(shè)計(jì)方法的發(fā)展過程,面向?qū)ο笳Z言的特點(diǎn)。掌握:面向?qū)ο蟮母拍?,面向?qū)ο蟮某绦蜷_發(fā)過程。教學(xué)基本內(nèi)容:程序設(shè)計(jì)方法的發(fā)展過程;面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想及概念,面向?qū)ο蟪绦蛟O(shè)計(jì)的要點(diǎn) 及開發(fā)過程。重點(diǎn)及難點(diǎn):面向?qū)ο蟮母拍?,面向?qū)ο蟮某绦蜷_發(fā)過程。教學(xué)方法:口講授法M討論法M口自學(xué)指導(dǎo)法其他M教學(xué)手段:口多媒體M口實(shí)物模型口掛圖口音像其他板書設(shè)計(jì):討論、思考題、作業(yè):1 .敘述面向?qū)ο蠡舅枷氲奶?/p>
2、點(diǎn)。2 .敘述面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與傳統(tǒng)回向過程的程序設(shè)計(jì)方法有何不同。3 .什么是類,什么是對象,類和對象是怎樣的關(guān)系?4 .抽象包括哪兩方面的含義?5 .什么是封裝,它具有怎樣的特點(diǎn)?6 .什么是多態(tài)?多態(tài)的實(shí)現(xiàn)方式及作用有哪些?7 .什么叫對象的封裝性?什么叫信息隱藏? C+語言是怎樣實(shí)現(xiàn)信息隱藏的?8 .什么叫繼承?什么叫派生?9 .什么叫多態(tài)性?多態(tài)性主要有哪幾種?10 .什么叫運(yùn)行時(shí)的多態(tài)性? C+語言中是怎樣實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性的?參考資料(含參考書目、文獻(xiàn)等):1、Hacy M.Dcitcl 71 Paul James DcitclC+大學(xué)教程(第三版),電子工業(yè)出版社。2、劉
3、正林,面向?qū)ο蟪绦蛟O(shè)計(jì),華中科技大學(xué)出版社。3、周生炳等,面向?qū)ο蟪绦蛟O(shè)計(jì),清華大學(xué)出版社。4、揣錦華,面向?qū)ο蟪绦蛟O(shè)計(jì)與VC+實(shí)踐,西安電子科技大學(xué)出版社。5、王育堅(jiān)編,面向?qū)ο缶幊探坛?,清華大學(xué)出版社。6、王萍編著,C+面向?qū)ο蟪绦蛟O(shè)計(jì),清華大學(xué)出版社出版。7、徐孝凱等編,面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn),中央廣播電視大學(xué)出版社出版。第一節(jié)面向?qū)ο蟮姆椒ㄒ?、面向?qū)ο蟮恼Z言出發(fā)點(diǎn):更直接地描述客觀世界中存在的事物時(shí)象)以及它們之間的關(guān)系。特點(diǎn):是高皴語言。將客觀事物看作具有屬性和行為的對象。通過抽象找出同一類對象的共同屬性和行為,形成類。通過類的繼承與多態(tài)實(shí)現(xiàn)代碼重用。優(yōu)點(diǎn):使程序能夠比較直接地反問題域
4、的本來面目,軟件開發(fā)人員能夠利用人類認(rèn)識(shí)事 物所采用的一般思維方法來進(jìn)行軟件開發(fā)。二、程序設(shè)計(jì)方法的發(fā)展歷程1 .面向過程的程序設(shè)計(jì)方法程序的目的:用于教學(xué)計(jì)算。主要工作:設(shè)計(jì)求解問題的過程。缺點(diǎn):對于龐大、宜雜的程序難以開發(fā)和維護(hù)。2 .面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法設(shè)計(jì)思跖:自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結(jié)構(gòu):按功能劃分為若干個(gè)基本模塊,形成一個(gè)樹狀結(jié)構(gòu)。各模塊間的關(guān)系盡可能簡 單,功能上相對獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組 成。其模塊化實(shí)現(xiàn)的具體方法是使用于程序。優(yōu)點(diǎn):有效地將一個(gè)較更雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的
5、于任 務(wù),便于開發(fā)和維護(hù)。缺點(diǎn):可重用性差、數(shù)據(jù)安全性差、難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件。具體有 以下幾點(diǎn):- 把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立的實(shí)體。- 當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過程都要進(jìn)行相應(yīng)的修改。- 每一種相對于老問題的新方法都要帶來額外的開錯(cuò),程序的可重用性差。- 圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困 難。3 .面向?qū)ο蟮姆椒ǚ椒ǎ?將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個(gè)相互依存、不可分離 的整體一對象。 對同類型對象抽象出其共性,形成類。 類通過一個(gè)簡單的外部接口,與外界發(fā)生關(guān)系。 對象與對象之間通過消息進(jìn)行通訊。優(yōu)點(diǎn): 程序模
6、塊間的關(guān)系更為筒單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了 良好的保障。 通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便。三、面向?qū)ο蟮幕靖拍?. 一般意義上的對象: 是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物。 可以是有形的(比如一輛汽車),也可以是無形的(比如一項(xiàng)計(jì)劃)。 是構(gòu)成世界的一個(gè)獨(dú)立單位,具有:靜態(tài)特征-可以用某種數(shù)據(jù)來描述動(dòng)態(tài)特征-對象所表現(xiàn)的行為或具有的功能2 .面向?qū)ο蠓椒ㄖ械膶ο螅?是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,它是用來構(gòu)成系統(tǒng)的一個(gè)基 本單位。對象由一組屬性和一組行為構(gòu)成。 屬性-用來描述對象靜態(tài)特征的數(shù)據(jù)項(xiàng)。 行為-用來描述對象動(dòng)態(tài)特征的操作序
7、列。3 .分類所依據(jù)的原則一一抽象忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出 事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個(gè)抽象的概念。 例如,石頭、樹木、汽車、分類人類通常的思維方法。房屋等都是人們在長期的生產(chǎn)和生活實(shí)踐中抽象出的概念。4 .面向?qū)ο蠓椒ㄖ械摹邦悺?具有相同屬性和服務(wù)的一組對象的集臺(tái)。 為屬于該類的全部對象提供了抽象的描述,包括屬性和行為兩個(gè)主要部分。 類與對象的關(guān)系:猶如模具與鑄件之間的關(guān)系,一個(gè)屬于某類的對象稱為該類的一個(gè)實(shí)例。5 .面向?qū)ο蠓椒ㄖ械?,封裝” 把對象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單元。 盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。對外形成一個(gè)
8、邊界(或者說一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。6 .面向?qū)ο蠓椒ㄖ械摹袄^承”繼承對于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率 的重要原因之一。 定義:特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類 的繼承。例如:將輪船作為一個(gè)一般類,客輪便是一個(gè)特殊類。7 .面向?qū)ο蠓椒ㄖ械?,多態(tài)性” 多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不 同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類及其 各個(gè)特殊類中具有不同的語義。例如:數(shù)的加法-實(shí)數(shù)的加法分集:數(shù)的加法第二節(jié)面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖こ蹋ㄜ浖_發(fā))是面向?qū)?/p>
9、象方法在軟件工程領(lǐng)域的全面應(yīng)用。它包 括:- 面向?qū)ο蟮姆治觯≦QA)- 面向?qū)ο蟮脑O(shè)計(jì)(0()0)- 面向?qū)ο蟮木幊蹋∣OP)- 面向?qū)ο蟮臏y試(QQT)- 面向?qū)ο蟮能浖S護(hù)(QQSM)一、系統(tǒng)分析 系統(tǒng)分析階段應(yīng)該扼要精確地抽象出系統(tǒng)必須做什么,但是不關(guān)心如何去實(shí) 現(xiàn)。 面向?qū)ο蟮南到y(tǒng)分析,直接用問題域中客觀存在的事物建立模型中的對象,對 單個(gè)事物及事物之間的關(guān)系,都保留他們的原貌,不做轉(zhuǎn)換,也不打破原有界 限而重新組合,因此能夠很好地映射客觀事物。二、設(shè)計(jì) 針對系統(tǒng)的一個(gè)具體實(shí)現(xiàn)運(yùn)用面向?qū)ο蟮姆椒?。其中包括兩方面的工作? 把OOA模型直接搬到QOD,作為QOD的一部分。針對具體實(shí)現(xiàn)中
10、的人機(jī)界面、數(shù)據(jù)存儲(chǔ)、任務(wù)管理等因素補(bǔ)充一些與 實(shí)現(xiàn)有關(guān)的部分。三、編程QQP工作就是用一種面向?qū)ο蟮木幊陶Z言把QQD模型中的每個(gè)成分書寫出來, 是面向?qū)ο蟮能浖_發(fā)最終落實(shí)的重要階段。四、測試測試的任務(wù)是發(fā)現(xiàn)軟件中的錯(cuò)誤。在面向?qū)ο蟮能浖y試中繼續(xù)運(yùn)用面向?qū)ο蟮母拍钆c原則來組織測試,以對象的 類作為基本測試單位,可以更準(zhǔn)確的發(fā)現(xiàn)程序錯(cuò)誤并提高測試效率。五、維護(hù)將軟件交付使用后,工作并沒有完結(jié),還要根據(jù)軟件的運(yùn)行情況和用戶需求,不 斷改進(jìn)系統(tǒng)。使用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件,其程序與問題域是一致的,因此,在維護(hù)階段運(yùn) 用面向?qū)ο蟮姆椒梢源蟠筇岣哕浖S護(hù)的效率。授課內(nèi)容:第一章類與對象授課時(shí)數(shù)1
11、8教學(xué)目的及要求:掌握:類定義的方法和存取級別。掌握:類的成員變星和成員函數(shù)的定義和使用,以及對象的定義。了解:友元函數(shù)和友元類。掌握:構(gòu)造函數(shù)和析構(gòu)函數(shù)。掌握:靜態(tài)類成員變量和成員函數(shù)的定義和使用方法。掌握:內(nèi)聯(lián)函數(shù)的定義和使用方法。掌握:對象指針及對象引用的使用。了解:容器類的定義。掌握:在函數(shù)中對象傳遞的機(jī)制。教學(xué)基本內(nèi)容:類的聲明,對象的定義,構(gòu)造函數(shù)、析構(gòu)函數(shù),對象指針,對象引用,靜態(tài)成 員,友元,標(biāo)識(shí)符的作用域,對象數(shù)組,成員對象,對象的存儲(chǔ)類等。重點(diǎn)與難點(diǎn):類及類對象的定義,構(gòu)造函數(shù)、析構(gòu)函數(shù)的定義,對象指針及對象引用的使用, 容器類的定義。教學(xué)方法:口講授法M討論法M口自學(xué)指導(dǎo)
12、法其他M-教學(xué)手段:口多媒體M口實(shí)物 模型 口掛圖 口音像 其他板書設(shè)計(jì):討論、思考題:1 .什么是類,什么是對象,類和對象是怎樣的關(guān)系?2 .敘述靜態(tài)成員和一般成員的區(qū)別。3 .什么叫友元?什么叫友元類?什么叫友元函教?什么叫友元成員函數(shù)?4,敘述友元與類的封裝性之間的關(guān)系。5.友元方法有什么優(yōu)點(diǎn)?有什么缺點(diǎn)?作業(yè):見書中第四章練習(xí)參考資料(含參考書目、文獻(xiàn)等):1、Harvey M.DuituI及Paul JamusDukd首,C+大學(xué)教程(第三板),電子工業(yè)出版社。2、劉正林,面向?qū)ο蟪绦蛟O(shè)計(jì),華中科技大學(xué)出版社。3、周生炳等,面向?qū)ο蟪绦蛟O(shè)計(jì),清華大學(xué)出版社。4、揣錦華,面向?qū)ο蟪绦蛟O(shè)
13、計(jì)與VC+實(shí)踐,西安電子科技大學(xué)出版社。5、王育堅(jiān)編,面向?qū)ο缶幊探坛?,清華大學(xué)出版社。6、王萍編著,C+面向?qū)ο蟪绦蛟O(shè)計(jì),清華大學(xué)出版社出版。7、徐孝凱等編,面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn),中央廣播電視大學(xué)出板社出版。第一節(jié)C+的面向?qū)ο蟮母拍钜弧⒊橄蟮母拍畛橄笫菍唧w對象(問題)進(jìn)行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。-先注意問題的本質(zhì)及描述,其次是實(shí)現(xiàn)過程或細(xì)節(jié)。- 數(shù)據(jù)抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理星)。- 代碼抽象:描述某類對象的共有的行為特征或具有的功能。- 抽象的實(shí)現(xiàn):通過類的聲明。二、抽象實(shí)例1 .日期抽象實(shí)例數(shù)據(jù)抽象:int Year, int Mont
14、h, int Day代碼抽象:SclPatcO,設(shè)置年、月、日IsLcapYcarO,”計(jì)算某年是否為閏年ShowDalrO,/顯示年、月、日的值抽象實(shí)例日期類class Datepublic:void SctDatc(int y, int m, int d);int IsLcapDatcQ;void ShowDalcO;private:inv Year,Month,Day;2 .鐘表抽象實(shí)例-鐘表數(shù)據(jù)抽象:inv Hour, int Minute, int Second代碼抽象:SetTimeO, ShowTimcQ抽象實(shí)例鐘表類class Clockpublic:void SctTimc(
15、int NewH, int New, int NewS);void ShowTimcO;private:int Hour,Minute,Second;3 .抽象實(shí)例人數(shù)據(jù)抽象:char *namc,char * gender,int age,int id代碼抽象:生物屬性角度:GctClothO, EatQ, StepO,-社會(huì)屬性角度:WorkQ, Promote:。,二、封裝將抽象出的數(shù)據(jù)成員、代碼成員相結(jié)合,將它們視為一個(gè)整體。- 目的是曾強(qiáng)安全性和簡化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只需要通過外部接口,以特定的訪問權(quán)限,來使用類的成員。- 實(shí)現(xiàn)封裝:類聲明中的實(shí)例:class C
16、lockpublic:void SciTimc(int NcwH, int NcwM, int NcwS);void ShowTimcO;private:inv Hour,Minute,Second;三、繼承與派生是C+中支持層次分類的一種機(jī)制,允許程序員在保持原有類特性的基礎(chǔ)上,進(jìn) 行更具體的說明。實(shí)現(xiàn):聲明派生類第七章四、多態(tài)性 多態(tài):同一名稱,不同的功能實(shí)現(xiàn)方式。 目的:達(dá)到行為標(biāo)識(shí)統(tǒng)一,減少程序中標(biāo)識(shí)符的個(gè)教。 實(shí)現(xiàn):重載函數(shù)和虛函數(shù)一一.第7(章五、C+中的類 類是具有相同屬性和行為的一組對象的集臺(tái),它為屬于該類的全部對象提供了 統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個(gè)主要部分。 利
17、用類可以實(shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。 利用類易于編寫大型宜雜程序,其模塊化程度比c中采用函數(shù)更高。第二節(jié)類的定義格式一、類的聲明類是一種用戶自定義類型,聲明形式:class類各稱(public:公有成員(外部接口)private:私有成員protected:保護(hù)型成員;(1)類的定義格式分為說明部分和實(shí)現(xiàn)部分,說明部分用來描述該類中的成員,包括 數(shù)據(jù)成員和成員函數(shù),成員函數(shù)使用來對數(shù)據(jù)成員進(jìn)行操作的即“方法”,實(shí)現(xiàn)部分用來定 義各種成員函數(shù),描述這些成員函數(shù)如何實(shí)現(xiàn)隊(duì)數(shù)據(jù)成員的操作。(2)類由類頭和類體兩部分組成。類頭由關(guān)鍵字class和類各組成,類名是由用戶定義 的標(biāo)識(shí)符,類頭用來向便
18、宜系統(tǒng)聲明定義了一個(gè)新的class類型;而類體是對類的組織形式 進(jìn)行具體的描述,它由訪問限制符(private,protccl",public)、數(shù)據(jù)成員和成員函數(shù)組成,整 個(gè)類體用一對大括號(hào)括起來,完整地表達(dá)對類的描述。(3)class允許隱藏內(nèi)部成員,它依靠類定義中的3個(gè)訪問限制符publicprivatcprolcctcd 來確定隱藏的程度,它們將類體分成3個(gè)大部分。(4)類的定義只是定義了某種類的組織形式,類似于結(jié)構(gòu)體的定義,編譯系統(tǒng)并不給 class類型的每個(gè)數(shù)據(jù)成員分配具體的內(nèi)存空間。二、類成員的訪問控制3個(gè)訪問限制符將類體分成3個(gè)大部分,每一部分都可以有數(shù)據(jù)成員和成員函
19、數(shù),也 可以只有數(shù)據(jù)成員或只有成員函數(shù),但不同的訪問限制符規(guī)定了該部分所具有的訪問權(quán)限。1. Public (公有類型的成員)在關(guān)鍵字public后面聲明,這一部分是透明的,它的數(shù)據(jù)成員和成員函數(shù)是開放的, 即可以由本類的成員函數(shù)直接訪問,也可以由任何外部函數(shù)來訪問,它們是類與外部的 接口。外部訪問是通過“對象等公有成員占”進(jìn)行。2. Private (私有類型的成員)在關(guān)健宇privalu后面聲明,這一部分象一個(gè)黑盒子,完全隱藏的。它只允許本類中 的成員函數(shù)直接訪問(既在成員函數(shù)體內(nèi)直呼其各寫出成員名),象日期類Dak的SdDag) 成員函數(shù)體內(nèi),可以直接寫<<ycar=y;mo
20、nth=m,day=d;M等語句;而類外部的任何函數(shù)都不 能訪問。如不允許編寫成”對象名.私有成員占“形式。如果緊跟在類名稱的后面聲明私有成員,則關(guān)鍵字pKM可以省略。3. Protected (保護(hù)類型成員)這一部分是半透明的,與private類似,其差別表現(xiàn)在繼承與派生時(shí)對派生類的影響 不同。它可由本類成員函數(shù)或它的派生類成員函數(shù)直接訪問,而其它的函數(shù)不允許訪問此部 分。二、數(shù)據(jù)成員與一般的變量聲明相同,但需要將它放在類的聲明體中。class Clockpublic:void SctTimc(int NexvH, int NewM, int NewS);聲明設(shè)置時(shí)鐘的成員函數(shù)void Sh
21、obTimu。;/聲明顯示時(shí)鐘的成員函數(shù)private:int Hour, Minute, Second;void Clock : SctTimc(int NewH, int NrwM, int NewS) /設(shè)置時(shí)鐘的成員函數(shù)在類體外的 實(shí)現(xiàn)Hour=NcwH;Minutc=NcwM;Sucond=NcwS;void Clock : ShowTimcO /顯示時(shí)鐘的成員函數(shù)在類體外的實(shí)現(xiàn)c()ut<<H()ur<<,:H<<Minutc<<l,:H<<Scc()nd;通常,總是將數(shù)據(jù)成員指定為私肓的,以實(shí)現(xiàn)數(shù)據(jù)隱藏,這些數(shù)據(jù)成員用來
22、描述該類 對象的屬性,編程者無法直接訪問它們而隱藏起來。四、成員函數(shù)1)成員函數(shù)說明 在類中說明原形,可以在類外給出函數(shù)體實(shí)現(xiàn),并在函數(shù)右前使用類各加以限定。 也可以直接在類中給出函數(shù)體,形成內(nèi)藤成員函數(shù)。 允許聲明重載函數(shù)和帶默認(rèn)形參值的函數(shù)。(見上面例子中成員函數(shù)的定義)2)內(nèi)聯(lián)成員函數(shù) 為了提高運(yùn)行時(shí)的效率,對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。 內(nèi)聯(lián)函數(shù)體中不要有侵雜結(jié)構(gòu)(如循環(huán)語句和switch語句)0 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式:- 將函數(shù)體放在類的聲明中。-使用inline關(guān)鍵字。舉例1 :class Pointpublic:void IniinitX,int initY)X=i
23、nitX;Y=initY;int GctXQ return X;int GetYQ return Y;private:ini X,Y;;舉例2class Pointpublic:void lnit(int initXjnt initY);intGctXO;int GctYQ;private:int X,Y;inline void Point:Init(int initX,int initY)X=initX;Y=iiiitY;inline int P()int:GctX()rcUim X;inline int Point:Gct7()return Y;一般將成員函數(shù)指定為公有的,作為該類對象訪問
24、私有數(shù)據(jù)成員的一個(gè)接口界面,即 對象訪問私有數(shù)據(jù)成員的一條消息通道提供給外界使用。因此,一個(gè)類的對象只能通過公有成員函數(shù)訪問它的私有數(shù)據(jù)成員,從而隱藏了處理 這些數(shù)據(jù)的具體實(shí)現(xiàn)細(xì)節(jié),使得類對數(shù)據(jù)的描述和類提供給外界來處理數(shù)據(jù)的界面互相獨(dú) 立,這就給出了面向?qū)ο蟮闹匾匦?。如日期類Date封裝在一個(gè)程序?qū)嶓w內(nèi)(定義日期類 Date的程序代碼),將它的私有數(shù)據(jù)成員yergonthdiy等隱藏起來,不讓對象隨意訪問,對象要訪問這些私有數(shù)據(jù)成員,也只有通過公有的成員函數(shù)SctDalH)、kLe叩、&吟和PrintDatuO等才能實(shí)現(xiàn)。舉例:Counter類用類定義一個(gè)計(jì)數(shù)器的抽象數(shù)據(jù)類型,計(jì)數(shù)
25、器允許的取值范圍為04294967295的正整 數(shù),可進(jìn)行的操作是計(jì)數(shù)器加1、減1和讀計(jì)數(shù)器的值。數(shù)據(jù)抽象:intvalue;代碼抽象:Counted);給計(jì)數(shù)器賦初值Segment。;/在計(jì)數(shù)器允許取值范圍內(nèi)對計(jì)數(shù)器加1DccrcmcntO;/在計(jì)數(shù)器允許取值范圍內(nèi)對計(jì)數(shù)器減1RuadValuc();/讀計(jì)數(shù)器的值Countur();撤消Counter類的對象程序?qū)崿F(xiàn):見面的1L2# include <第三節(jié)對象的定義一、對象的定義格式類的對象是該類的某一特定實(shí)體,即類類型的變量。聲明形式類占對象占;例 Clock myClock;訪問對象成員類中成員互訪:直接使用成員各。類外訪問:使
26、用“對象名成員仁”方式訪問public屬性的成員。類應(yīng)用舉例:#includc<i()strcam>using namespace std;class Clock類的聲明略/類的實(shí)現(xiàn)"int main。 Clock myClock;myOock.SctTimc(8,30,30);myClock.ShowTimcO;二、對象指針和對象引用的定義格式1、對象指針聲明形式類名*對象指針占;例Point A(5,10);Piont *ptr;ptr=&A;通過指針訪問對象成員對象指針各成員占ptr->gctxQ 相當(dāng)于(*ptr).gctxO;對象指針應(yīng)用舉例:in
27、t main。Point A(5,10);Point *ptr;ptr=&A;int x;x=ptr->GctX();cout<<x<<cndl;return 0;2、對象引用(聲明形式類名&對象占=巳存在的同類對象各;給已有的對象另外取一個(gè)別名例:Point A;Pioiit &B=A;通過對象引用訪問對象成員使用“對象引用等成員臺(tái)”方式訪問public屬性 的成員(與使用對象名成員各方式訪問是等價(jià)的)。舉例說明:#includc<iostrcam>using namespace std;class Clock類的聲明略/類的
28、實(shí)現(xiàn)嶼int rnainQ Clock Clockl;Clock &myClock=Clockl;/ / 定義對象引用myClock.SetTime(8,30R);/等同于 Clockl. etTime(8,3030);myClock.ShowTimu();等同于 Clockl. ShowTimcQ;第四節(jié)對象的初始化一、構(gòu)造函數(shù)1、構(gòu)造函數(shù)說明構(gòu)造函數(shù)的作用是在對象被創(chuàng)建時(shí)使用特定的值構(gòu)造對象,或者說將對象初始化 為一個(gè)特定的狀態(tài)。在對象創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用。如果程序中未聲明,則系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)默認(rèn)形式的構(gòu)造函數(shù)允許為內(nèi)減函數(shù)、重載函數(shù)、帶默認(rèn)形參值的函數(shù)。構(gòu)造函數(shù)舉例:class
29、 Clockpublic:Clock (ini NcwH, inv NcwM, ini NcwS);構(gòu)造函數(shù)void ScvTimc(int NcwH, inv NcwM, inv NcwS);void ShowTimcQ;private:int Hour,Nlinutr,Second;構(gòu)造函數(shù)的實(shí)現(xiàn):Cl()ck::Ck)ck(int NuxvH, int NewM, ini NrwS)Hour= NewH;Minutc= NewM;Second = NewS;建立對象時(shí)構(gòu)造函數(shù)的作用:int main。Clock c (0,0,0);隱含調(diào)用構(gòu)造函數(shù),將初始值作為實(shí)參。c-ShowTimc
30、Q;2、復(fù)制構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù))拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對象引用。class類名 public:類名(形參);構(gòu)造函數(shù)類名(類占&對象名);拷貝構(gòu)造函數(shù) ;類名::類名(類占&對象各)拷貝構(gòu)造函數(shù)的實(shí)現(xiàn) 函數(shù)體 拷貝構(gòu)造函數(shù)舉例1:class Pointpublic:P()int(int xx=O,int yy=0)X=xx; Y=yy;P()int(P(int& p);hit GctXQ return X;int GetYQ ruturnY;private:int X,Y;P()int:P()int (Point& p)x=p.x;
31、Y=p.Y;coutv v”拷貝構(gòu)造函數(shù)被調(diào)用侵制構(gòu)造函數(shù)舉例2:當(dāng)用類的一個(gè)對象去初始化該類的另一個(gè)對象時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷 貝賦值。int mainQ PoimA(l,2);Point B(A); 拷貝構(gòu)造函數(shù)被調(diào)用cout<<B.GctX()<<cndl;復(fù)制構(gòu)造函數(shù)舉例3:若函數(shù)的形參為類對象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函 數(shù)。例如:void fiinl (Point p) cout<<p.GctXQ<<cndl;int main。 Point A(l);funl(A); 調(diào)用拷貝構(gòu)造函數(shù)侵制構(gòu)造函數(shù)舉例
32、4:當(dāng)函數(shù)的返回值是類對象時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如:Point fun2Q Point A(l,2);return A; /調(diào)用拷貝構(gòu)造函數(shù)int mainQPoint B;B=fun2Q;如果程序員沒有為類聲明拷貝初始化構(gòu)造函數(shù),則編譯器自己生成一個(gè)拷貝構(gòu)造函數(shù)。這個(gè)構(gòu)造函數(shù)執(zhí)行的功能是:用作為初始值的對象的每個(gè)數(shù)據(jù)成員的值, 初始化將要建立的對象的對應(yīng)數(shù)據(jù)成員。二、析構(gòu)函數(shù)完成對象被刪除前的一些清理工作。在對象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它, 然后再釋放此對象所屬的空間。如果程序中未聲明析構(gòu)函數(shù),編譯器將自動(dòng)產(chǎn)生一個(gè)默 認(rèn)的析構(gòu)函數(shù)。構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例:#indudc<
33、;iostrcam>using namespace std;class Pointpublic:P()int(int xxjnt yy);-PointO;其它函數(shù)原形private:iniXjntY;P(>int:P()int(int xxjnt yy) X=xx; Y=yy;Point:-Point。/其它函數(shù)的實(shí)現(xiàn)略類的應(yīng)用舉例:一周型游泳池如圖所示,現(xiàn)在需在其周圍建一圓型過道,并在其四周圍上柵欄。櫥 欄價(jià)格為35元/米,過道造價(jià)為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸 入。要求編程計(jì)算并輸出過道和柵欄的造價(jià)。#includc <iostrcam> us
34、ing namespace std;const float PI = 3.14159;const float FciiccPricc = 35;const float ConerctcPricc = 20;/聲明類Circle及其數(shù)據(jù)和方法class Circleprivate:float radius;public:Circlc(floal r); 構(gòu)造函數(shù)float CircumfcrcnccO const; 圓周長float ArcaQ const; 圓面積;/類的實(shí)現(xiàn)/構(gòu)造函數(shù)初始化數(shù)據(jù)成員radiusCirclc:Circlc(floal r)radius=r/計(jì)算圓的周長float
35、 Circlc::CircumfcrcnccO const(return 2 * PI * radius;/計(jì)算圓的面積float Circlc:Arca() constreturn PI * radius * radius;) void main Qfloat radius;float FciiccCost, ConcrctcCost;/提示用戶輸入半徑cout<<MEnter the radius of the pool: M;cin» radius;聲明Circle對象Circle Pool(radius);Circle P()olRim(radius + 3);/
36、計(jì)算柵欄造價(jià)并輸出FciiccCost = P(x)lRim.CircumfcrenceQ * FcnccPricc;cout << "FencingCost is ¥" << FcnccCost << cndl;/計(jì)算過道造價(jià)并輸出ConcrctcCost = (PoolRim.ArcaO - P()()I.Arca()*C()ncrcLcPricc;cout << HConcrete Cost is ¥" << ConcrctcCost « ciidl;運(yùn)行結(jié)果Enter
37、 the radius of the pool: 10Fencing Cost is ¥ 2858.85Concrete Cost is Y 4335.39第五節(jié)對象指針和對象引用的應(yīng)用一、對象指針作為函數(shù)的參數(shù)二、對象引用做函數(shù)的參數(shù)三、This指針1、This指針說明隱含于每一個(gè)類的成員函數(shù)中的特殊指針。明確地指出了成員函數(shù)當(dāng)前所操作的數(shù)據(jù)所屬的對象。-當(dāng)通過一個(gè)對象調(diào)用成員函數(shù)時(shí),系統(tǒng)先將該對象的地址賦給this指針,然后調(diào)用成員函數(shù),成員函數(shù)對對象的數(shù)據(jù)成員進(jìn)行操作時(shí),就隱含使用了 this指針。例如:Point類的構(gòu)造函數(shù)體中的語句:X=xx;Y=yy;相當(dāng)于:this-&
38、gt;X=xx;this->Y=yy;2、指向類的非靜態(tài)成員的指針通過指向成員的指針只能訪問公有成員。1)聲明指向成員的指針 聲明指向公有數(shù)據(jù)成員的指針。類型說明符 類名:*指針臺(tái); 聲明指向公有函數(shù)成員的指針)類型說明符(類等產(chǎn)指針聳(參數(shù)表); 指向數(shù)據(jù)成員的指針(說明指針應(yīng)該指向哪個(gè)成員)指針占=&類等:數(shù)據(jù)成員占;2)通過對象名(或?qū)ο笾羔槪┡c成員指針結(jié)合來訪問數(shù)據(jù)成員對象等*類成員指針名或:對象指針各一>*類成員指針各 指向函數(shù)成員的指針初始化指針名=類等:函數(shù)成員各;3)通過對象名(或?qū)ο笾羔槪┡c成員指針結(jié)合來訪問函數(shù)成員(對象各產(chǎn)類成員指針占X參數(shù)表)或:(對
39、象指針各一>*類成員指針名)(參數(shù)表)舉例說明:訪問對象的公有成員函數(shù)的不同方式ini main。主函數(shù) Point A(4,5); 聲明對象 APoint *pl=&A;聲明對象指針并初始化聲明成員函數(shù)指針并初始化int (Point:*p_GetX)0=Point:GetX;/ (1)使用成員函數(shù)指針訪問成員函數(shù)cout< < (A.*p_GetX) Q < <endl;/ (2)使用對象指針訪問成員函數(shù) cout<<(pl->GctX)Q«cndl;/ (3)使用對象臺(tái)訪問成員函數(shù) c()ut<<A.GctXQ
40、<<ciidl;3、指向類的靜態(tài)成員的指針對類的靜態(tài)成員的訪問不依賴于對象可以用普通的指針來指向和訪問靜態(tài)成員例6-1通過指針訪問類的靜態(tài)數(shù)據(jù)成員#includc <iostrcam>using namespace std;class Point /Point 類聲明public:外部接口Point(int xx=0, int yy=O) X=xx;Y=yy;countP+;構(gòu)造函數(shù) P()int(P()ini &p); 拷貝構(gòu)造函數(shù) int GctXQ return X;int GetYQ return Y;static int countP;靜態(tài)數(shù)據(jù)成員引用
41、性說明private: /私有數(shù)據(jù)成員int X,Y;Point :Point(Point &p) X=p.X; Y=p.Y; couniP+; int Poini:c()uniP=0; 靜態(tài)數(shù)據(jù)成員定義性說明int main。/主函教聲明一個(gè)int型指針,指向類的靜態(tài)成員int *count=&Point:countP;Point A(4,5); 聲明對象 Acout«MP()int A;,«A.GctX0<<,/,<<A.GctY0;/直接通過指針訪問靜態(tài)數(shù)據(jù)成員cout«M Object id=H<<*co
42、um<<ciidl;Point B(A);/聲明對象 Bcout«MPoint B,H«B.GctX()«1,H«B.GetY0;直接通過指針訪問靜態(tài)數(shù)據(jù)成員cout<<H Object id=H<<*coiint<<cndl;例6-15通過指針訪問類的靜態(tài)函數(shù)成員#includc <iostrcam>using namespace std;class Point /Point 類聲明 public:外部接口其它函數(shù)嶼static void GctCQ/靜態(tài)函數(shù)成員cout<<H O
43、bject id=H<<countP<<ciidl;private: 私有數(shù)據(jù)成員int X,Y;static int countP;靜態(tài)數(shù)據(jù)成員引用性說明;/函數(shù)實(shí)現(xiàn)略int P()int:c()uniP=O; /靜態(tài)數(shù)據(jù)成員定義性說明int mainQ 主函數(shù)/指向函數(shù)的指針,指向類的靜態(tài)成員函數(shù)void (*gc)0=Point:GctC;Point A(4,5); /聲明對象 Acout«MPoint A;,«A.GctX0«H,M«A.GctY0;gcQ; 輸出對象序號(hào),通過指針訪問靜態(tài)函數(shù)成員Point B(A);/聲
44、明對象 Bcout<<,TointB;,<<B.GetXO<<,<<B.GetYO;gcO; 輸出對象序號(hào),通過指針訪問靜態(tài)函數(shù)成員四、遞歸類第六節(jié) 動(dòng)態(tài)內(nèi)存分配一、動(dòng)態(tài)申請內(nèi)存操作符newnew類型占T (初值列表)功能:在程序執(zhí)行期間,申請用于存放T類型對象的內(nèi)存空間,并依初值列表賦以初值。結(jié)果值:成功:T類型的指針,指向新分配的內(nèi)存。失?。? (NULL)二、釋放內(nèi)存操作符deletedelete 指針 P功能:釋放指針P所指向的內(nèi)存。P必須是new操作的返回值。例6-16動(dòng)態(tài)創(chuàng)建對象舉例#includc<iostrcam>us
45、ing namespace std;class Point public:Point。 X=Y=0; cout<<HDcfault Constructor called.nH;P()int(int xxjnt yy) X=xx; Y=yy; cout<< "Constructor callcd.nH; -Point。 cout«nDcstructor callcd.n° int GctXO return X;int GetYQ return Y;void Movc(int xjnt y) X=x; Y=y; private:int X,Y;
46、int main。 cout<<MStcp ()nc:H<<cndl;Point *ptrl=new Point;delete Ptrl;cout<<uStcp Tw():H<<cndl;Ptrl =nrxv Point。,2);delete Ptrl;return 0;運(yùn)行結(jié)果:Step One:Default Constructor called.Destructor called.Step Two:Constructor called.Destructor called.三、淺拷貝與深拷貝淺拷貝-實(shí)現(xiàn)對象間數(shù)據(jù)元素的一一對應(yīng)更制。深拷貝-當(dāng)
47、被曳制的對象數(shù)據(jù)成員是指針類型時(shí),不是復(fù)制該指針成員本身,而是將 指針?biāo)傅膶ο筮M(jìn)行復(fù)制。例6-20對象的淺拷貝#includc<iostrcam>using namespace std;class Point類的聲明同例6-16/;class ArrayOfPoints類的聲明同例6-18/;int mainQ int number;cin>>numbcr;ArrayOFPoints pointsArrayl (number);pointsArrayl.Elcmcnt(0).Movc(5,10);points Array l.Elcmciit(l).M()vc(l 5
48、,20);A rrayC) fPoints points A rray2 (points A rrayl);cout<<HC()py of points A rray 1 :M < < end 1;cout<<HPoint_0 of array2: " <<pointsArray2.Elcmciit(0).GctX0<<* H<<pointsArray2.Elcmcnt(0).GetYO<<cndl;cout<<HPoint_l of array2: H <<p(>int
49、sArray2.Elcmciit( 1).GctXQ<<* H<<p()intsArray2.Elcmcni(l).GctY0<<cndl;points Array l.Elcmcnt(0).M()vc(25,30);points A rray 1 .Element(1) .Move (35,40);cout<<HAftcr the moving of pointsArrayl:1,«endl;cout<<HPoint_0 of array2: H<<pointsArray2.Elcmcnt(0).GctXO
50、171;9 M<<pointsArray2.Elcmciit(0).GctY()<<cndl;cout<<HPoint_l of array2: M<<pointsArray2.Elcmcnt(l).GctX0<<r M<<pointsArray2.Elcmcnt(l).GctY0<<cndl;運(yùn)行結(jié)果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Copy of points
51、Arrayl:Point_0 of array2: 5, 10Pointof array2: 15, 20After the moving of pointsArrayl:Point_0 of array2: 25, 30Pointof array2: 35, 40Deleting.Destructor called.Destructor called.Deleting.接下來程序出現(xiàn)異常,也就是運(yùn)行錯(cuò)誤。用圖說明淺拷貝(見電子課件)例6-21對象的深拷貝#includc<iostrcam>using name space std;class Point類的聲明同例6-16;cla
52、ss ArravOfPointsJ public:A rrayO fPoints (A rrayO fPoints& points Array);其它成員同例6-18;ArravOfPoints :ArravOfPoints <J(Array()fP()ints& pointsArray) numberOfPoints=p()intsArray.numbcr()fP()ints;points=nrT Pointnumbcr( )fPoints;f()r (int i=0; i<numbcr()fPoints; i+)points H.Movc (points A r
53、ray. Elcmciit(i) .GctXQ,pointsArray.Elcmcnt(i).GctYO);int main。 同例 6-20程序的運(yùn)行結(jié)果如下:Please enter the number of p()ints:2Default Constructor called.Default Constructor called.Default Constructor called.Default Constructor called.Copy of pointsArrayl:Point_0 of array2: 5, 10Pointofarray2: 15, 20After the
54、 moving of pointsArrayl:P()int_0 of array2: 5,10Pointof array2: 15, 20Deleting.Destmetor called.Destructor called.Deleting.Destmetor called.Destructor called.用圖說明(見電子課件)第七節(jié)靜態(tài)成員一、靜態(tài)數(shù)據(jù)成員int Point:countP=0;int mainOPoint A(4,5);cout<<nPoiiit A,r<<A.GctX()<<n,H«A.GctYO;A.GctCQ;Poi
55、nt B(A);cout«nPoint B?,«B.GctX0«n;,«B.GctY0;B.GctCO;|二、靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)-類外代碼可以使用類占和作用域操作符來調(diào)用靜態(tài)成員函數(shù)。-靜志成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)舉例1:#includc<i()strcam>using namespace std;class Application public:static void fQ;static void gQ;private:static int global;int Applicati()n::global =0;void Applicari()n:fQ global=5;void Applicari()n:gQ cout<<global<<cndl;int main。Applica
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 娃娃玩具的國內(nèi)市場用戶反饋分析考核試卷
- 無線廣播傳輸中的信號(hào)加密技術(shù)考核試卷
- 海洋石油鉆采工程招投標(biāo)與合同管理考核試卷
- 有色金屬礦山資源評價(jià)與預(yù)測方法考核試卷
- 灌溉項(xiàng)目對農(nóng)村勞動(dòng)力就業(yè)的影響考核試卷
- 公司雇用項(xiàng)目經(jīng)理合同范例
- 與企業(yè)合作開發(fā)合同標(biāo)準(zhǔn)文本
- 全部承包裝修合同范例
- 有機(jī)合成中新型能源轉(zhuǎn)換材料的探索考核試卷
- 公司戰(zhàn)略咨詢合同標(biāo)準(zhǔn)文本
- 電機(jī)控制器設(shè)計(jì)原理與現(xiàn)代技術(shù)應(yīng)用
- 2025時(shí)事政治考試題庫和參考答案
- 化工智能制造技術(shù)基礎(chǔ)知識(shí)單選題100道及答案
- 2025山東文旅云智能科技限公司招聘19人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2021年煙草營銷技能鑒定(高級理論)三級理論歷年真題(含答案)
- 醫(yī)療器械進(jìn)院流程
- 耳鼻喉技師模擬試題(附參考答案)
- 財(cái)務(wù)案例分析報(bào)告范文
- YC/T 616-2024殘次煙判定及處理規(guī)范
- 福彩培訓(xùn)銷售員
評論
0/150
提交評論