![類與對象課件_第1頁](http://file4.renrendoc.com/view/053d35d63344a7d909b22b355bbe4968/053d35d63344a7d909b22b355bbe49681.gif)
![類與對象課件_第2頁](http://file4.renrendoc.com/view/053d35d63344a7d909b22b355bbe4968/053d35d63344a7d909b22b355bbe49682.gif)
![類與對象課件_第3頁](http://file4.renrendoc.com/view/053d35d63344a7d909b22b355bbe4968/053d35d63344a7d909b22b355bbe49683.gif)
![類與對象課件_第4頁](http://file4.renrendoc.com/view/053d35d63344a7d909b22b355bbe4968/053d35d63344a7d909b22b355bbe49684.gif)
![類與對象課件_第5頁](http://file4.renrendoc.com/view/053d35d63344a7d909b22b355bbe4968/053d35d63344a7d909b22b355bbe49685.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+程序設(shè)計新世紀(jì)應(yīng)用型高等教育教材編審委員會 組編主編 羅燁 李秉璋第二版新世紀(jì)應(yīng)用型高等教育軟件專業(yè)系列規(guī)劃教材第1頁,共42頁。第5章 類與對象第2頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述3對象、類和消息是面向?qū)ο蠹夹g(shù)的核心。1.對象在現(xiàn)實世界中,一切事物(實體)都可看成是面向?qū)ο蠹夹g(shù)中的對象。對象可以是有形的,比如汽車、計算機;也可以是無形的,比如授課、計劃。對象可以是簡單的,比如一本教材,也可以是復(fù)雜的,如由許多元器件構(gòu)成的手機。任何一個對象都具有屬性和行為兩大特征。屬性用于描述對象的靜態(tài)特征,比如汽車的功率、載重、輪子個數(shù)等。行為描述對象的動態(tài)特征,比如前進、倒退、加速。5.1.
2、1 面向?qū)ο蟮母拍畹?頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述42.類類是對象的抽象,對象則是類的具體化,稱為類的實例。通常,又稱類是一種用于創(chuàng)建對象的模板。在類中,屬性通常稱為數(shù)據(jù),行為稱為操作、方法。3.消息各對象間的聯(lián)系是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的。要使對象實現(xiàn)某種行為,必須向?qū)ο蟀l(fā)送相應(yīng)的消息。5.1.1 面向?qū)ο蟮母拍畹?頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述5面向?qū)ο蟪绦蛟O(shè)計的一個簡單定義是:將具有相同特征(即具有相同數(shù)據(jù)和操作)的同一組對象用類來描述。面向?qū)ο蟪绦蛟O(shè)計是把程序構(gòu)造成由若干個對象組成,每個對象由一些數(shù)據(jù)以及對這些數(shù)據(jù)實施的操作構(gòu)成。對數(shù)據(jù)的操作是通過向?qū)ο蟀l(fā)送
3、消息來實現(xiàn)的。5.1.2 什么是面向?qū)ο蟪绦蛟O(shè)計第5頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述6從上述定義可以看出,面向?qū)ο蟪绦蛟O(shè)計和之前的面向過程程序設(shè)計存在不同之處:5.1.2 什么是面向?qū)ο蟪绦蛟O(shè)計(1)在面向過程的程序設(shè)計中,函數(shù)是構(gòu)成程序的基本模塊。在面向?qū)ο蟮某绦蛟O(shè)計中,對象是構(gòu)成程序的基本模塊。(2)在面向過程的程序設(shè)計中,數(shù)據(jù)和操作是分離的,數(shù)據(jù)作為參數(shù)傳遞給對數(shù)據(jù)進行操作的函數(shù)。在面向?qū)ο蟮某绦蛟O(shè)計中,數(shù)據(jù)和操作是封裝在一起的,形成一個整體。(3)在面向過程的程序設(shè)計中,數(shù)據(jù)的表示是公開的,用戶可以直接對數(shù)據(jù)進行處理。在面向?qū)ο蟮某绦蛟O(shè)計中,用戶只能通過對象發(fā)送消息來操作數(shù)據(jù)
4、。第6頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述7面向?qū)ο蟪绦蛟O(shè)計具有以下幾個特點:5.1.3 面向?qū)ο蟪绦蛟O(shè)計的特點1.抽象2.封裝性3.繼承性4.多態(tài)性第7頁,共42頁。5.1 面向?qū)ο蟪绦蛟O(shè)計概述8軟件開發(fā)方法或技術(shù)有優(yōu)劣之分,對一個軟件開發(fā)方法或技術(shù)的評價標(biāo)準(zhǔn)主要是看它的開發(fā)效率和對軟件質(zhì)量的保證程度。開發(fā)效率指使用該方法或技術(shù)進行軟件開發(fā)的難易程度以及它對縮短開發(fā)周期的支持程度。軟件質(zhì)量是指用該方法或技術(shù)開發(fā)出的軟件的正確性、健壯性、可復(fù)用性、易維護性以及效率等。5.1.4 面向?qū)ο蟮膬?yōu)點1.數(shù)據(jù)與操作合一2.軟件復(fù)用3. 軟件維護第8頁,共42頁。5.2 類與對象概述9在C+中,類
5、定義的語法格式如下:5.2.1 類定義第9頁,共42頁。5.2 類與對象概述10對于類定義,需要說明以下幾點:(1)類屬于類型范疇,系統(tǒng)不會為類分配內(nèi)存空間,就像系統(tǒng)不會為int、double等類型分配內(nèi)存一樣。因此在類定義中不能對數(shù)據(jù)成員進行初始化。(2)類的三種訪問控制private、public、protected,在類中沒有先后次序,可以多次出現(xiàn),也可以不出現(xiàn)。C+規(guī)定,類中默認(rèn)的訪問控制是私有的,即private。(3)和結(jié)構(gòu)體定義類似,類定義結(jié)束的最后必須加分號“;”。(4)在CGoods類定義中只對成員函數(shù)進行了聲明,并沒有對其進行定義。(5)類的成員不能使用auto、regis
6、ter和extern等修飾符,一般只能用static修飾符。5.2.1 類定義第10頁,共42頁。5.2 類與對象概述11在C+中有三種成員訪問控制類型:5.2.2 類成員的訪問控制公有類型public私有類型private保護類型protected第11頁,共42頁。5.2 類與對象概述12類成員的訪問控制:將需要隱藏的成員設(shè)為私有類型,成為一個外部無法訪問的黑盒子;將提供給外界的接口設(shè)為公有類型,對外部就是透明的;而保護成員就相當(dāng)于一個籠子,它給派生類提供一些特殊的訪問控制。5.2.2 類成員的訪問控制第12頁,共42頁。5.2 類與對象概述13建立對象的方法類似于定義變量。語法格式為:5
7、.2.3 對象的創(chuàng)建與使用定義了對象后,對對象成員的訪問采用如下形式:第13頁,共42頁。5.2 類與對象概述14建立同類對象后,每個對象中的數(shù)據(jù)成員都占用獨立的存儲空間,保存著各自的數(shù)據(jù)。而對于同類對象,它們的成員函數(shù)都是相同的代碼,沒有必要為每個同類對象的成員函數(shù)分配獨立的存儲空間,只需為類的成員函數(shù)分配一份存儲空間,存放代碼。而這份代碼被這個類的所有對象共用。5.2.4 對象的存儲方式第14頁,共42頁。5.2 類與對象概述151.對象指針也可以使用對象指針訪問對象。對象指針遵循一般指針的規(guī)則。例如: CGoods car, *pcar ; /pcar為CGoods類的指針 pcar=&
8、car ; /pcar指向了car前面已經(jīng)介紹過,使用“對象名.成員名”就可以訪問對象成員。有了指向?qū)ο蟮闹羔?可以通過該指針經(jīng)成員訪問運算符“-”訪問對象成員。5.2.5 對象指針和成員指針第15頁,共42頁。5.2 類與對象概述162.成員指針也可以通過指針訪問對象成員。指向?qū)ο蟪蓡T的指針使用前要先定義,再賦值,最后引用。定義對象成員指針的語法格式為:定義了指向成員的指針之后,需要對其賦值,也就是要確定指針指向類中哪一個成員。對成員指針賦值的語法形式為:5.2.5 對象指針和成員指針第16頁,共42頁。5.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)171.構(gòu)造函數(shù)的定義類的構(gòu)造函數(shù)的作用是在對象建立后,對對象
9、的非靜態(tài)數(shù)據(jù)成員初始化。構(gòu)造函數(shù)的定義形式如下:5.3.1 構(gòu)造函數(shù)的定義與調(diào)用第17頁,共42頁。5.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)182.構(gòu)造函數(shù)的調(diào)用如前述,構(gòu)造函數(shù)的作用是完成對象初始化。因此在新建對象獲得內(nèi)存空間后,該對象就要調(diào)用構(gòu)造函數(shù),對數(shù)據(jù)成員進行初始化。這一過程是自動進行的。當(dāng)類中有多個構(gòu)造函數(shù)時,系統(tǒng)根據(jù)對象提供的參數(shù)決定調(diào)用哪個構(gòu)造函數(shù)。我們以三參數(shù)構(gòu)造函數(shù)5.3.1 構(gòu)造函數(shù)的定義與調(diào)用第18頁,共42頁。5.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)193.成員初始化表對于類的構(gòu)造函數(shù),還有如下形式:成員初始化表的作用是向類傳遞初始化時的參數(shù),并初始化數(shù)據(jù)成員。成員初始化表的具體格式是:5.3.
10、1 構(gòu)造函數(shù)的定義與調(diào)用第19頁,共42頁。5.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)20類的析構(gòu)函數(shù)的作用是在對象生存期結(jié)束時進行必要的處理工作。析構(gòu)函數(shù)定義形式如下:析構(gòu)函數(shù)也是類的特殊的成員函數(shù),具有以下特征:(1)析構(gòu)函數(shù)名由“”符號和類名構(gòu)成。(2)當(dāng)一個對象的生存期結(jié)束時,對象會自動調(diào)用析構(gòu)函數(shù),完成對象生存期結(jié)束時必要的處理,例如釋放由構(gòu)造函數(shù)申請的內(nèi)存等。(3)如果類定義中沒有顯式定義析構(gòu)函數(shù),編譯器也會為類建立一個不具有任何功能的默認(rèn)的析構(gòu)函數(shù),其形式為:(4)在一個作用域中存在多個對象時,各對象遵循“先構(gòu)造、后析構(gòu);后構(gòu)造、先析構(gòu)”的析構(gòu)次序。5.3.2 析構(gòu)函數(shù)的定義與調(diào)用第20頁,共4
11、2頁。5.4 復(fù)制構(gòu)造函數(shù)21引用是另一個變量的別名。通過引用名和被引用的變量名訪問變量的效果是一樣的。定義引用的語法格式為:對于引用,還需要注意以下兩點:(1)一個引用,只能引用變量,不能引用常量或表達式。即只能引用有地址的對象。(2)引用與被引用之間,不能像普通類型的變量一樣,可以進行類型轉(zhuǎn)換。5.4.1 引用及函數(shù)的引用調(diào)用第21頁,共42頁。5.4 復(fù)制構(gòu)造函數(shù)221.復(fù)制構(gòu)造函數(shù)的定義由于復(fù)制構(gòu)造函數(shù)也屬于構(gòu)造函數(shù),所以其函數(shù)名仍然是類名。參數(shù)只有一個,類型是同類引用。復(fù)制構(gòu)造函數(shù)定義格式如下:2.復(fù)制構(gòu)造函數(shù)的調(diào)用和構(gòu)造函數(shù)、析構(gòu)函數(shù)一樣,復(fù)制構(gòu)造函數(shù)也是由對象自動調(diào)用的。當(dāng)出現(xiàn)以
12、下三種情況時,需要獲取數(shù)據(jù)的對象要調(diào)用復(fù)制構(gòu)造函數(shù)完成自身初始化。5.4.2 復(fù)制構(gòu)造函數(shù)的定義與調(diào)用第22頁,共42頁。5.4 復(fù)制構(gòu)造函數(shù)233.對象的賦值C+系統(tǒng)為類提供了默認(rèn)的賦值運算,使得同類對象可以像普通變量一樣進行賦值運算同類對象間對應(yīng)數(shù)據(jù)成員賦值,稱之為“按成員賦值”。在大多數(shù)情況下,類的默認(rèn)賦值運算已經(jīng)滿足要求,也就不需要再自行定義賦值運算。5.4.2 復(fù)制構(gòu)造函數(shù)的定義與調(diào)用第23頁,共42頁。5.4 復(fù)制構(gòu)造函數(shù)241.默認(rèn)復(fù)制構(gòu)造函數(shù)的問題2.類的深復(fù)制所謂深復(fù)制,就是給每個對象分配一個獨立的內(nèi)存區(qū)域,達到如圖所示的存儲布局。5.4.3 復(fù)制與深復(fù)制第24頁,共42頁。
13、5.4 復(fù)制構(gòu)造函數(shù)25在類中,數(shù)據(jù)成員的類型可以是基本數(shù)據(jù)類型,也可以是類類型,即其他類的對象作為一個類的數(shù)據(jù)成員。這樣的成員稱為對象成員(又稱成員對象),含有對象成員的類稱為組合類(又稱聚合類)。在建立組合類對象時,組合類的構(gòu)造函數(shù)要對所有對象成員、數(shù)據(jù)成員初始化。因此組合類的構(gòu)造函數(shù)語法格式如下:5.4.4 組合類與構(gòu)造函數(shù)第25頁,共42頁。5.4 復(fù)制構(gòu)造函數(shù)26組合類的構(gòu)造函數(shù)執(zhí)行順序是:5.4.4 組合類與構(gòu)造函數(shù)(1)首先按照對象成員在組合類中的定義順序,調(diào)用對象成員的構(gòu)造函數(shù),完成對象成員的初始化。(2)按照數(shù)據(jù)成員在組合類中的定義順序,對成員初始化表中各數(shù)據(jù)成員初始化。(3
14、)最后執(zhí)行組合類構(gòu)造函數(shù)的函數(shù)體。第26頁,共42頁。5.5 類的靜態(tài)成員27當(dāng)一個類的各對象需要共享數(shù)據(jù),可以在類定義中用關(guān)鍵字static將該數(shù)據(jù)說明為靜態(tài)數(shù)據(jù)成員。這樣靜態(tài)數(shù)據(jù)成員在內(nèi)存只存儲一份,被該類的所有對象所共享。因此一般用類名來引用類的靜態(tài)成員。5.5.1 靜態(tài)數(shù)據(jù)成員第27頁,共42頁。5.5 類的靜態(tài)成員28對靜態(tài)數(shù)據(jù)成員再說明兩點:(1)對靜態(tài)數(shù)據(jù)使用前,必須要在類外進行定義性說明,格式如下:(2)任何對象的釋放,都不影響靜態(tài)數(shù)據(jù)成員生存期。靜態(tài)數(shù)據(jù)成員是在程序開始運行時獲得內(nèi)存,程序結(jié)束運行時釋放內(nèi)存。但其作用域僅限于定義該類的作用域。5.5.1 靜態(tài)數(shù)據(jù)成員第28頁,
15、共42頁。5.6 常對象與常成員29如果在聲明一個引用時用const修飾,被聲明的引用就是常引用。常引用所引用的對象不能被更新。常引用的定義語法為:5.6.1 常引用第29頁,共42頁。5.6 常對象與常成員30如果在聲明一個引用時用const修飾,被聲明的引用就是常引用。常引用所引用的對象不能被更新。常引用的定義語法為:5.6.2 常對象第30頁,共42頁。5.6 常對象與常成員31使用const說明的數(shù)據(jù)成員稱為常數(shù)據(jù)成員。常數(shù)據(jù)成員的定義與一般常變量的定義方法相同。常數(shù)據(jù)成員只能通過構(gòu)造函數(shù)的成員初始化表進行初始化,此后在對象的生存期中不能再作任何更改。常數(shù)據(jù)成員定義的格式如下:5.6.
16、3 常數(shù)據(jù)成員第31頁,共42頁。5.6 常對象與常成員32在類中用const關(guān)鍵字修飾的函數(shù),稱為常成員函數(shù)。常成員函數(shù)的聲明格式如下:5.6.4 常成員函數(shù)第32頁,共42頁。5.7 類的友元33在類中用關(guān)鍵字friend修飾一個函數(shù)的聲明,該函數(shù)就成為這個類的友元函數(shù)。友元函數(shù)可以是一個普通函數(shù),也可以是其他類的成員函數(shù)。友元函數(shù)在類中的聲明語法格式為:5.7.1 友元函數(shù)第33頁,共42頁。5.7 類的友元34友元可以是函數(shù),還可以是類。可以將一個類聲明為另一個類的友元類。例如將B類聲明為A類的友元類。這樣B類的所有成員函數(shù)都是A類的友元函數(shù),在B類的成員函數(shù)中,可以通過A類對象訪問A
17、類的所有成員。通常將友元類設(shè)計為一種對數(shù)據(jù)操作或類之間傳遞消息的輔助類。5.7.2 友元類第34頁,共42頁。5.7 類的友元35關(guān)于友元關(guān)系,還有以下性質(zhì):5.7.2 友元類(1)友元關(guān)系是不傳遞的。(2)友元關(guān)系是單向的。(3)友元關(guān)系是不被繼承的。第35頁,共42頁。5.8 類應(yīng)用實例公司人員管理程序36從20世紀(jì)70年代到90年代,出現(xiàn)了大批面向?qū)ο蟮某绦蛟O(shè)計語言,同時出現(xiàn)了大批面向?qū)ο蟮慕UZ言。這些建模語言功能類似,但在表述上存在差異,給軟件的交流帶來困難。于是OMG(ObjectManagementGroup)經(jīng)過多年努力,于2003年建立了統(tǒng)一建模語言(UML)。UML語言的主要內(nèi)容是使用各種圖符描述軟件模型的靜態(tài)結(jié)構(gòu)、動態(tài)行為和模塊組織與管理。本節(jié)僅介紹類與對象的UML圖形描述以及它們之間的靜態(tài)關(guān)系。對UML感興趣的讀者可以參考相關(guān)書籍,了解更多UML語言的內(nèi)容。5.8.1 UML簡介第36頁,共42頁。5.8 類應(yīng)用實例公司人員管理程序371.類在UML語言中,用一個由上到下分為三部分的矩形來表示一個類。類名在頂部區(qū)域,數(shù)據(jù)成員(UML中稱為屬性)在中間區(qū)域,成員函數(shù)(UML中稱為操作)在底部區(qū)域。除了名稱部分外,其他兩個部分是可選的,即類的屬性和操作可以不表示出來,也就是說,一個寫了類名的矩形
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Target-Protein-Ligand-Linker-Conjugates-4-生命科學(xué)試劑-MCE-5926
- 1-2-Dihexanoyl-sn-glycero-3-PS-sodium-生命科學(xué)試劑-MCE-8684
- 二零二五年度離婚協(xié)議書中共同財產(chǎn)清算起訴狀
- 2025年度電力市場交易購售電合同
- 二零二五年度大型賽事活動合作2025年度營銷合同
- 二零二五年度私人住宅裝修質(zhì)量與安全雙保障協(xié)議
- 2025年度離婚子女債務(wù)償還與財產(chǎn)分割執(zhí)行協(xié)議
- 2025年度煙酒企業(yè)社會責(zé)任履行與公益合作合同
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)銀行擔(dān)保協(xié)議
- 2025年度智慧社區(qū)建設(shè)采購合同智能設(shè)備配置規(guī)范
- 醫(yī)院消防安全知識培訓(xùn)課件
- 反走私課件完整版本
- 四年級下冊數(shù)學(xué)知識點總結(jié)
- 第三屆全國石油工程設(shè)計大賽作品(油藏工程設(shè)計單項)
- (人衛(wèi)版第九版?zhèn)魅静W(xué)總論(一))課件
- 《批判性思維原理和方法》全套教學(xué)課件
- 產(chǎn)后康復(fù)-腹直肌分離
- 丙烯-危險化學(xué)品安全周知卡
- 粉條加工廠建設(shè)項目可行性研究報告
- 《配電網(wǎng)設(shè)施可靠性評價指標(biāo)導(dǎo)則》
- 2024年國家電網(wǎng)招聘之通信類題庫附參考答案(考試直接用)
評論
0/150
提交評論