




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++程序設計新世紀應用型高等教育教材編審委員會組編主編羅燁李秉璋第二版新世紀應用型高等教育軟件專業系列規劃教材第5章類與對象5.1面向對象程序設計概述3對象、類和消息是面向對象技術的核心。1.對象在現實世界中,一切事物(實體)都可看成是面向對象技術中的對象。對象可以是有形的,比如汽車、計算機;也可以是無形的,比如授課、計劃。對象可以是簡單的,比如一本教材,也可以是復雜的,如由許多元器件構成的手機。任何一個對象都具有屬性和行為兩大特征。屬性用于描述對象的靜態特征,比如汽車的功率、載重、輪子個數等。行為描述對象的動態特征,比如前進、倒退、加速。5.1.1
面向對象的概念5.1面向對象程序設計概述42.類類是對象的抽象,對象則是類的具體化,稱為類的實例。通常,又稱類是一種用于創建對象的模板。在類中,屬性通常稱為數據,行為稱為操作、方法。3.消息各對象間的聯系是通過向對象發送消息來實現的。要使對象實現某種行為,必須向對象發送相應的消息。5.1.1
面向對象的概念5.1面向對象程序設計概述5面向對象程序設計的一個簡單定義是:將具有相同特征(即具有相同數據和操作)的同一組對象用類來描述。面向對象程序設計是把程序構造成由若干個對象組成,每個對象由一些數據以及對這些數據實施的操作構成。對數據的操作是通過向對象發送消息來實現的。5.1.2什么是面向對象程序設計5.1面向對象程序設計概述6從上述定義可以看出,面向對象程序設計和之前的面向過程程序設計存在不同之處:5.1.2什么是面向對象程序設計(1)在面向過程的程序設計中,函數是構成程序的基本模塊。在面向對象的程序設計中,對象是構成程序的基本模塊。(2)在面向過程的程序設計中,數據和操作是分離的,數據作為參數傳遞給對數據進行操作的函數。在面向對象的程序設計中,數據和操作是封裝在一起的,形成一個整體。(3)在面向過程的程序設計中,數據的表示是公開的,用戶可以直接對數據進行處理。在面向對象的程序設計中,用戶只能通過對象發送消息來操作數據。5.1面向對象程序設計概述7面向對象程序設計具有以下幾個特點:5.1.3
面向對象程序設計的特點1.抽象2.封裝性3.繼承性4.多態性5.1面向對象程序設計概述8軟件開發方法或技術有優劣之分,對一個軟件開發方法或技術的評價標準主要是看它的開發效率和對軟件質量的保證程度。開發效率指使用該方法或技術進行軟件開發的難易程度以及它對縮短開發周期的支持程度。軟件質量是指用該方法或技術開發出的軟件的正確性、健壯性、可復用性、易維護性以及效率等。5.1.4
面向對象的優點1.數據與操作合一2.軟件復用3.軟件維護5.2類與對象概述9在C++中,類定義的語法格式如下:5.2.1類定義5.2類與對象概述10對于類定義,需要說明以下幾點:(1)類屬于類型范疇,系統不會為類分配內存空間,就像系統不會為int、double等類型分配內存一樣。因此在類定義中不能對數據成員進行初始化。(2)類的三種訪問控制private、public、protected,在類中沒有先后次序,可以多次出現,也可以不出現。C++規定,類中默認的訪問控制是私有的,即private。(3)和結構體定義類似,類定義結束的最后必須加分號“;”。(4)在CGoods類定義中只對成員函數進行了聲明,并沒有對其進行定義。(5)類的成員不能使用auto、register和extern等修飾符,一般只能用static修飾符。5.2.1類定義5.2類與對象概述11在C++中有三種成員訪問控制類型:5.2.2類成員的訪問控制公有類型public私有類型private保護類型protected5.2類與對象概述12類成員的訪問控制:將需要隱藏的成員設為私有類型,成為一個外部無法訪問的黑盒子;將提供給外界的接口設為公有類型,對外部就是透明的;而保護成員就相當于一個籠子,它給派生類提供一些特殊的訪問控制。5.2.2類成員的訪問控制5.2類與對象概述13建立對象的方法類似于定義變量。語法格式為:5.2.3
對象的創建與使用定義了對象后,對對象成員的訪問采用如下形式:5.2類與對象概述14建立同類對象后,每個對象中的數據成員都占用獨立的存儲空間,保存著各自的數據。而對于同類對象,它們的成員函數都是相同的代碼,沒有必要為每個同類對象的成員函數分配獨立的存儲空間,只需為類的成員函數分配一份存儲空間,存放代碼。而這份代碼被這個類的所有對象共用。5.2.4
對象的存儲方式5.2類與對象概述151.對象指針也可以使用對象指針訪問對象。對象指針遵循一般指針的規則。例如:CGoodscar,*pcar;//pcar為CGoods類的指針pcar=&car;//pcar指向了car前面已經介紹過,使用“對象名.成員名”就可以訪問對象成員。有了指向對象的指針,可以通過該指針經成員訪問運算符“->”訪問對象成員。5.2.5
對象指針和成員指針5.2類與對象概述162.成員指針也可以通過指針訪問對象成員。指向對象成員的指針使用前要先定義,再賦值,最后引用。定義對象成員指針的語法格式為:定義了指向成員的指針之后,需要對其賦值,也就是要確定指針指向類中哪一個成員。對成員指針賦值的語法形式為:5.2.5
對象指針和成員指針5.3構造函數和析構函數171.構造函數的定義類的構造函數的作用是在對象建立后,對對象的非靜態數據成員初始化。構造函數的定義形式如下:5.3.1構造函數的定義與調用5.3構造函數和析構函數182.構造函數的調用如前述,構造函數的作用是完成對象初始化。因此在新建對象獲得內存空間后,該對象就要調用構造函數,對數據成員進行初始化。這一過程是自動進行的。當類中有多個構造函數時,系統根據對象提供的參數決定調用哪個構造函數。我們以三參數構造函數5.3.1構造函數的定義與調用5.3構造函數和析構函數193.成員初始化表對于類的構造函數,還有如下形式:成員初始化表的作用是向類傳遞初始化時的參數,并初始化數據成員。成員初始化表的具體格式是:5.3.1構造函數的定義與調用5.3構造函數和析構函數20類的析構函數的作用是在對象生存期結束時進行必要的處理工作。析構函數定義形式如下:析構函數也是類的特殊的成員函數,具有以下特征:(1)析構函數名由“~”符號和類名構成。(2)當一個對象的生存期結束時,對象會自動調用析構函數,完成對象生存期結束時必要的處理,例如釋放由構造函數申請的內存等。(3)如果類定義中沒有顯式定義析構函數,編譯器也會為類建立一個不具有任何功能的默認的析構函數,其形式為:(4)在一個作用域中存在多個對象時,各對象遵循“先構造、后析構;后構造、先析構”的析構次序。5.3.2析構函數的定義與調用5.4復制構造函數21引用是另一個變量的別名。通過引用名和被引用的變量名訪問變量的效果是一樣的。定義引用的語法格式為:對于引用,還需要注意以下兩點:(1)一個引用,只能引用變量,不能引用常量或表達式。即只能引用有地址的對象。(2)引用與被引用之間,不能像普通類型的變量一樣,可以進行類型轉換。5.4.1
引用及函數的引用調用5.4復制構造函數221.復制構造函數的定義由于復制構造函數也屬于構造函數,所以其函數名仍然是類名。參數只有一個,類型是同類引用。復制構造函數定義格式如下:2.復制構造函數的調用和構造函數、析構函數一樣,復制構造函數也是由對象自動調用的。當出現以下三種情況時,需要獲取數據的對象要調用復制構造函數完成自身初始化。5.4.2
復制構造函數的定義與調用5.4復制構造函數233.對象的賦值C++系統為類提供了默認的賦值運算,使得同類對象可以像普通變量一樣進行賦值運算———同類對象間對應數據成員賦值,稱之為“按成員賦值”。在大多數情況下,類的默認賦值運算已經滿足要求,也就不需要再自行定義賦值運算。5.4.2
復制構造函數的定義與調用5.4復制構造函數241.默認復制構造函數的問題2.類的深復制所謂深復制,就是給每個對象分配一個獨立的內存區域,達到如圖所示的存儲布局。5.4.3復制與深復制5.4復制構造函數25在類中,數據成員的類型可以是基本數據類型,也可以是類類型,即其他類的對象作為一個類的數據成員。這樣的成員稱為對象成員(又稱成員對象),含有對象成員的類稱為組合類(又稱聚合類)。在建立組合類對象時,組合類的構造函數要對所有對象成員、數據成員初始化。因此組合類的構造函數語法格式如下:5.4.4
組合類與構造函數5.4復制構造函數26組合類的構造函數執行順序是:5.4.4
組合類與構造函數(1)首先按照對象成員在組合類中的定義順序,調用對象成員的構造函數,完成對象成員的初始化。(2)按照數據成員在組合類中的定義順序,對成員初始化表中各數據成員初始化。(3)最后執行組合類構造函數的函數體。5.5類的靜態成員27當一個類的各對象需要共享數據,可以在類定義中用關鍵字static將該數據說明為靜態數據成員。這樣靜態數據成員在內存只存儲一份,被該類的所有對象所共享。因此一般用類名來引用類的靜態成員。5.5.1靜態數據成員5.5類的靜態成員28對靜態數據成員再說明兩點:(1)對靜態數據使用前,必須要在類外進行定義性說明,格式如下:(2)任何對象的釋放,都不影響靜態數據成員生存期。靜態數據成員是在程序開始運行時獲得內存,程序結束運行時釋放內存。但其作用域僅限于定義該類的作用域。5.5.1靜態數據成員5.6常對象與常成員29如果在聲明一個引用時用const修飾,被聲明的引用就是常引用。常引用所引用的對象不能被更新。常引用的定義語法為:5.6.1常引用5.6常對象與常成員30如果在聲明一個引用時用const修飾,被聲明的引用就是常引用。常引用所引用的對象不能被更新。常引用的定義語法為:5.6.2
常對象5.6常對象與常成員31使用const說明的數據成員稱為常數據成員。常數據成員的定義與一般常變量的定義方法相同。常數據成員只能通過構造函數的成員初始化表進行初始化,此后在對象的生存期中不能再作任何更改。常數據成員定義的格式如下:5.6.3
常數據成員5.6常對象與常成員32在類中用const關鍵字修飾的函數,稱為常成員函數。常成員函數的聲明格式如下:5.6.4
常成員函數5.7類的友元33在類中用關鍵字friend修飾一個函數的聲明,該函數就成為這個類的友元函數。友元函數可以是一個普通函數,也可以是其他類的成員函數。友元函數在類中的聲明語法格式為:5.7.1友元函數5.7類的友元34友元可以是函數,還可以是類。可以將一個類聲明為另一個類的友元類。例如將B類聲明為A類的友元類。這樣B類的所有成員函數都是A類的友元函數,在B類的成員函數中,可以通過A類對象訪問A類的所有成員。通常將友元類設計為一種對數據操作或類之間傳遞消息的輔助類。5.7.2友元類5.7類的友元35關于友元關系,還有以下性質:5.7.2友元類(1)友元關系是不傳遞的。(2)友元關系是單向的。(3)友元關系是不被繼承的。5.8類應用實例———公司人員管理程序36從20世紀70年代到90年代,出現了大批面向對象的程序設計語言,同時出現了大批面向對象的建模語言。這些建模語言功能類似,但在表述上存在差異,給軟件的交流帶來困難。于是OMG(ObjectManagementGroup)經過多年努力,于2003年建立了統一建模語言(UML
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健身產業投資協議
- 《深入理解Bootloader:課件概覽》
- 授課教師石冬劍66課件
- 《人際交往藝術》課件
- 雙語列車長非正常事件服務技巧課件
- 鐵路路基與軌道課件
- 標準體育場館租賃合同
- 房產擔保借款合同
- 世紀英才文化課件五上
- 《房地產基礎》課件 情境二 教你選對小區
- 干部履歷表(中共中央組織部2015年制)
- 貴溪鮑家礦業有限公司采礦權出讓評估報告書
- 低壓電氣基礎知識培訓課件
- 《活著》讀書分享優秀課件
- 贊美詩歌1050首下載
- 上海市長寧區2022年高考英語一模試卷(含答案)
- 全國中小學美術教師基本功比賽理論知識測試試卷
- 土方工程量計算與平衡調配
- 16起觸電事故案例分析
- 額定電壓35kV及以下電力電纜技術規范
- 各種配電箱接線系統圖25024
評論
0/150
提交評論