




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++程序設計教程(第二版)第八章
類Chapter8
Class
蘇州大學計算機科學與技術學院2/5/20231類
類是一種可以作為交易的概念代碼.類是自定義的數據類型.類與應用程序不同,類的功能雖然獨立,但不能獨立啟動,就象汽車零件那樣.類機制要通過編程的方法來維護類的數據表達,值范圍和操作并不是簡單的,因為要限制一些操作只能讓類自己來做,以免發(fā)生問題時,無人敢對其負責.類機制就是通過語言的規(guī)定性來實現一些技術,使類具有數據封裝,信息屏蔽,多態(tài)等特征,起到數據類型的作用,而達到方便編程的目的.2/5/20232第八章內容從結構到類(FromStructuretoClass)
成員函數(MemberFunctions)
操作符(Operators)
再論程序結構(ProgramStrutureRestatement)
屏蔽類的實現(ShieldClassImplementations)
靜態(tài)成員(StaticMembers)
友元(Friends)2/5/202338.1從結構到類結構體舉例(f0801)單純堆積數據空間構造的類型,不含有相關操作所有相關操作都必須由使用結構體的程序員自己承擔,不便于代碼的移植和重用僅是一個不完整的自定義數據類型2/5/202348.1從結構到類類概念:不但描述數據空間,還描述其操作的自定義類型定義方法classDate{ private:
int
year,month,day; public: voidsetdate(int,int,int); ……};2/5/202358.1從結構到類類舉例(f0802)成員函數和成員變量成員權限privatepublicProtected類定義的兩部分:類定義本體和成員函數定義一般情況下類的定義和應用程序為多文件結構2/5/202368.1從結構到類類對象和變量變量:由內部數據類型或衍生的結構類型所產生的實體對象:由類產生的實體,本質上,變量也是對象,只不過粗糙一點罷了2/5/202378.1從結構到類類和結構體的比較結構體的開放性類的封閉和自成一體性類的使用使得程序開發(fā)的流程分工變得極為清晰2/5/202388.2成員函數成員函數與普通函數的區(qū)別成員函數屬于類,成員函數定義是類設計的一部分,其作用域是類作用域.而普通函數一般為全局函數成員函數的操作主體是對象,使用時通過捆綁對象來行使其職責,而普通函數被調用時沒有操作主體2/5/202398.2成員函數成員函數的定義方法類內部定義類外部定義合理選擇上述兩種方法的原則成員函數的內聯性問題成員函數可以在類內,也可以在類外定義,若在類內定義,則默認為內聯函數.但編譯器對內聯的接受自有其原則.2/5/202310成員函數的定義方法classDate{
intyear,month,day;public:voidset(inty,intm,intd)//默認內聯
{ year=y;month=m;day=d;}…};inlinebool
Date::isLeapYear()//顯式內聯{ return!(year%400)||!(year%4)&&year%100;}…8.2成員函數17:26:1711訪問成員函數的方式對象方式
Dated;d.set(2005,12,5);…對象指針方式
Date*dp=newDate;
dp->set(2005,12,5);//…deletedp;17:26:1712常成員函數與函數的常量參數常成員函數
對捆綁的對象,不允許寫操作函數的常量參數對傳遞的參數,不允許寫操作例如:
bool
Date::comp(constDate&a)const{year=2005;//error:常成員函數捆綁的對象
a.year=2003;//error:常量對象
returnyear==b.yaer&&month==a.month&&day==a.day;}
常成員函數的服務對象一般是類的使用者2/5/202313重載成員函數類的成員函數允許進行重載重載的處理規(guī)則和以前相同舉例(f0804)2/5/2023148.3操作符操作符定義的函數重載特征操作符在類中定義的目的:方便編程和直觀上的理解操作符定義就是函數定義,調用操作符就是調用函數舉例:f0805
Pointoperator+(constPoint&a,constPoint&b){Points;
s.set(a.x+b.x,a.y+b.y);returns;}Pointp,q;p.set(3,2);q.set(1,5);Pointr=p+q;//p+q等價于operator+(p,q)2/5/2023158.3操作符操作符在類中定義的作用:
讓編譯器理解人性化編程代碼.從正確性上講并不是必要的.例如,Java不允許操作符重載操作符在類中定義的性質不能創(chuàng)建新的操作符:如@個別操作符不能重載:如“::”、“.”、“?:”等,因為對這些運算符的重載會嚴重破壞語法規(guī)則優(yōu)先級和結合性不能改變Pointa,b,c;Pointd=a+b*c;操作數不能改變專門處理對象禁止使重載后的操作符的意義發(fā)生根本變化2/5/202316運算符重載時的值返回和引用返回值返回:返回臨時表達式的值,例如:Pointoperator+(constPoint&a,constPoint&b){Points;
s.set(a.x+b.x,a.y+b.y);returns;}引用返回:如果有將返回值放入參數中并需要進行連續(xù)操作的需要,便需要以引用形式返回參數。例如:ostream&operator<<(ostream&o,constPoint&d){returno<<”(“<<d.x<<”,“<<d.y<<”)\n”;}8.3操作符2/5/202317增量操作符的重載增量操作符重載時的特殊性:前后增量的形式相同但意義不同前增量運算符分析:運算后表達式結果和變量自身結果的一致,且要求進行變量本身的左值連續(xù)運算后增量運算符分析:運算后表達式結果和變量自身結果的不一致,且不允許進行變量本身的左值連續(xù)運算處理方法:使參數和返回值類型不同舉例:f0806后增量運算符重載時的編譯特殊處理:實參和形參個數不一致8.3操作符2/5/202318運算符重載的成員函數化處理成員函數形式的操作符重載:PointPoint::operator+(constPoint&d)const{Points;
s.set(x+d.x,y+d.y);returns;}普通函數形式的操作符重載:
Pointoperator+(constPoint&a,constPoint&b)const{Points;
s.set(a.x+b.x,a.y+b.y);returns;}8.3操作符2/5/202319運算符重載的成員函數化處理無論是成員函數形式的重載還是普通函數形式的重載:p+q等價于成員操作符p.operator+(q),或者普通操作符operator(p,q)兩者必居其一.成員函數形式的運算符重載的必要條件:某個操作數是當前類的對象<<不可以成為成員函數形式重載的原因8.3操作符2/5/2023208.4再論程序結構訪問控制成員函數一般為公有public。公有的成員函數在類的外部可以被使用,即外界可以調用成員函數.數據成員一般為私有private。私有的數據成員在外部不能被訪問,即外界不能訪問對象的數據分量,而只能由成員函數內部去處理.公有和私有可任意設定訪問控制public和private是語言提供給程序員的功能:類的內部和外部被隔絕類的界面(接口):類全部公有成員函數的聲明2/5/2023218.4再論程序結構類的程序結構舉例:f0809類定義作為頭文件,如:point.h類的實現作為獨立編譯單元,如:point.cpp使用類的程序作為另一獨立編譯單元,如:f0809.cpp類的頭文件和類的實現可以作為一個獨立的資源提供給編程者.內聯的成員函數定義一般放在頭文件中.頭文件中必須使用頭文件衛(wèi)士技術.2/5/202322類作用域和類定義作用域類定義作用域:從類定義結束開始,到從外面包圍類定義的塊結束(若類定義外無包圍塊,則結束于文件);使用類的程序員在類定義作用域下編程類作用域:類定義內部及成員函數定義內部;實現類的程序員在類作用域下編程舉例(f0810)類作用域中成員變量被局部變量屏蔽的現象及其理解類作用域其實是類定義作用域的子集8.4再論程序結構2/5/2023238.5屏蔽類的實現使用類的應用程序只需要類定義頭文件編程實現類,也只需要類定義頭文件,不需要使用類的程序細節(jié)確定了類定義(頭文件),便可以從事兩方面的編程而互不干涉.類定義成功地屏蔽了類的實現,是類機制的技術體現.舉例2/5/2023248.6靜態(tài)成員8.6.1靜態(tài)數據成員靜態(tài)數據成員的需要性類中屬性的共有性使用全局變量來解決屬性共有性問題的缺陷應該屬于類,但不能使用普通成員變量的形式來實現屬性共有舉例:f08122/5/202325靜態(tài)數據成員的使用概念:屬于類的全部對象所有的靜態(tài)成員變量稱為靜態(tài)數據成員,它對于每個類而言只有一個實體,每個對象中不再有它的副本。定義方法:分為聲明和定義初始化兩個形式舉例:f0813合理的靜態(tài)數據成員定義初始化位置類定義頭文件(類定義體內部和外部):KOMain函數所在文件的的開頭:KO類定義內部實現部分(即成員函數定義的位置):OK8.6靜態(tài)成員2/5/2023268.6.2靜態(tài)成員函數調用時,不捆綁對象,所以,不能直接操作對象和其成員,若需訪問該類對象,必須以參數傳遞之.靜態(tài)成員函數一般設計為公有的,以訪問私有靜態(tài)數據成員為目的.靜態(tài)成員函數一般不能訪問普通成員變量調用方式是以類名加域操作符::后跟靜態(tài)成員函數.舉例:f08148.6靜態(tài)成員2/5/2023278.7友元友元的概念需要使用友元的原因:某些類以外的函數(如普通函數等)需要直接訪問某個類的保護或私有成員需要使用友元的目的:提高效率友元使用的后果:破壞了類的封裝特性(除特殊情況,不推薦使用)舉例(f0815):若以普通函數的身份實現,則要大量調用成員函數去訪問私有數據成員,而用友元之后,可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省楚雄彝族自治州祿豐市2024-2025學年八年級下學期開學生物學試題(含答案)
- 農業(yè)政策支持措施作業(yè)指導書
- 私人美容師服務合同
- 基于大數據的商業(yè)決策支持系統(tǒng)開發(fā)合同
- 電子支付結算合作協(xié)議
- 農業(yè)自動化系統(tǒng)安裝維護合同
- 活動籌備報告
- 《現代酒店管理基礎》(第二版)課件 任務7 酒店服務質量管理
- 企業(yè)員工健康管理與促進計劃指南
- 春蕾百合幼兒園入學條件
- 第十七課 《虛擬與現實》(課件)2023-2024學年北師大版(2013)初中心理健康七年級上冊
- GB/T 15558.4-2023燃氣用埋地聚乙烯(PE)管道系統(tǒng)第4部分:閥門
- 管理學原理說課課件
- 拆除電桿施工方案
- 管理學原理 王光健版
- 挖掘機傷人賠償協(xié)議書
- 幼兒園醫(yī)護助教知識學習培訓PPT
- 學校課后作業(yè)布置記錄表
- 《義務教育地理課程標準(2022年版)》全文學習解讀-2022年版義務教育課
- 2023年浙江高考英語真題含答案
- 市政供水管線保護專項施工方案
評論
0/150
提交評論