




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++程序設(shè)計(jì)教程(第二版)第八章
類Chapter8
Class
蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2/5/20231類
類是一種可以作為交易的概念代碼.類是自定義的數(shù)據(jù)類型.類與應(yīng)用程序不同,類的功能雖然獨(dú)立,但不能獨(dú)立啟動,就象汽車零件那樣.類機(jī)制要通過編程的方法來維護(hù)類的數(shù)據(jù)表達(dá),值范圍和操作并不是簡單的,因?yàn)橐拗埔恍┎僮髦荒茏岊愖约簛碜觯悦獍l(fā)生問題時,無人敢對其負(fù)責(zé).類機(jī)制就是通過語言的規(guī)定性來實(shí)現(xiàn)一些技術(shù),使類具有數(shù)據(jù)封裝,信息屏蔽,多態(tài)等特征,起到數(shù)據(jù)類型的作用,而達(dá)到方便編程的目的.2/5/20232第八章內(nèi)容從結(jié)構(gòu)到類(FromStructuretoClass)
成員函數(shù)(MemberFunctions)
操作符(Operators)
再論程序結(jié)構(gòu)(ProgramStrutureRestatement)
屏蔽類的實(shí)現(xiàn)(ShieldClassImplementations)
靜態(tài)成員(StaticMembers)
友元(Friends)2/5/202338.1從結(jié)構(gòu)到類結(jié)構(gòu)體舉例(f0801)單純堆積數(shù)據(jù)空間構(gòu)造的類型,不含有相關(guān)操作所有相關(guān)操作都必須由使用結(jié)構(gòu)體的程序員自己承擔(dān),不便于代碼的移植和重用僅是一個不完整的自定義數(shù)據(jù)類型2/5/202348.1從結(jié)構(gòu)到類類概念:不但描述數(shù)據(jù)空間,還描述其操作的自定義類型定義方法classDate{ private:
int
year,month,day; public: voidsetdate(int,int,int); ……};2/5/202358.1從結(jié)構(gòu)到類類舉例(f0802)成員函數(shù)和成員變量成員權(quán)限privatepublicProtected類定義的兩部分:類定義本體和成員函數(shù)定義一般情況下類的定義和應(yīng)用程序?yàn)槎辔募Y(jié)構(gòu)2/5/202368.1從結(jié)構(gòu)到類類對象和變量變量:由內(nèi)部數(shù)據(jù)類型或衍生的結(jié)構(gòu)類型所產(chǎn)生的實(shí)體對象:由類產(chǎn)生的實(shí)體,本質(zhì)上,變量也是對象,只不過粗糙一點(diǎn)罷了2/5/202378.1從結(jié)構(gòu)到類類和結(jié)構(gòu)體的比較結(jié)構(gòu)體的開放性類的封閉和自成一體性類的使用使得程序開發(fā)的流程分工變得極為清晰2/5/202388.2成員函數(shù)成員函數(shù)與普通函數(shù)的區(qū)別成員函數(shù)屬于類,成員函數(shù)定義是類設(shè)計(jì)的一部分,其作用域是類作用域.而普通函數(shù)一般為全局函數(shù)成員函數(shù)的操作主體是對象,使用時通過捆綁對象來行使其職責(zé),而普通函數(shù)被調(diào)用時沒有操作主體2/5/202398.2成員函數(shù)成員函數(shù)的定義方法類內(nèi)部定義類外部定義合理選擇上述兩種方法的原則成員函數(shù)的內(nèi)聯(lián)性問題成員函數(shù)可以在類內(nèi),也可以在類外定義,若在類內(nèi)定義,則默認(rèn)為內(nèi)聯(lián)函數(shù).但編譯器對內(nèi)聯(lián)的接受自有其原則.2/5/202310成員函數(shù)的定義方法classDate{
intyear,month,day;public:voidset(inty,intm,intd)//默認(rèn)內(nèi)聯(lián)
{ year=y;month=m;day=d;}…};inlinebool
Date::isLeapYear()//顯式內(nèi)聯(lián){ return!(year%400)||!(year%4)&&year%100;}…8.2成員函數(shù)17:26:1711訪問成員函數(shù)的方式對象方式
Dated;d.set(2005,12,5);…對象指針方式
Date*dp=newDate;
dp->set(2005,12,5);//…deletedp;17:26:1712常成員函數(shù)與函數(shù)的常量參數(shù)常成員函數(shù)
對捆綁的對象,不允許寫操作函數(shù)的常量參數(shù)對傳遞的參數(shù),不允許寫操作例如:
bool
Date::comp(constDate&a)const{year=2005;//error:常成員函數(shù)捆綁的對象
a.year=2003;//error:常量對象
returnyear==b.yaer&&month==a.month&&day==a.day;}
常成員函數(shù)的服務(wù)對象一般是類的使用者2/5/202313重載成員函數(shù)類的成員函數(shù)允許進(jìn)行重載重載的處理規(guī)則和以前相同舉例(f0804)2/5/2023148.3操作符操作符定義的函數(shù)重載特征操作符在類中定義的目的:方便編程和直觀上的理解操作符定義就是函數(shù)定義,調(diào)用操作符就是調(diào)用函數(shù)舉例: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不允許操作符重載操作符在類中定義的性質(zhì)不能創(chuàng)建新的操作符:如@個別操作符不能重載:如“::”、“.”、“?:”等,因?yàn)閷@些運(yùn)算符的重載會嚴(yán)重破壞語法規(guī)則優(yōu)先級和結(jié)合性不能改變Pointa,b,c;Pointd=a+b*c;操作數(shù)不能改變專門處理對象禁止使重載后的操作符的意義發(fā)生根本變化2/5/202316運(yùn)算符重載時的值返回和引用返回值返回:返回臨時表達(dá)式的值,例如:Pointoperator+(constPoint&a,constPoint&b){Points;
s.set(a.x+b.x,a.y+b.y);returns;}引用返回:如果有將返回值放入?yún)?shù)中并需要進(jìn)行連續(xù)操作的需要,便需要以引用形式返回參數(shù)。例如:ostream&operator<<(ostream&o,constPoint&d){returno<<”(“<<d.x<<”,“<<d.y<<”)\n”;}8.3操作符2/5/202317增量操作符的重載增量操作符重載時的特殊性:前后增量的形式相同但意義不同前增量運(yùn)算符分析:運(yùn)算后表達(dá)式結(jié)果和變量自身結(jié)果的一致,且要求進(jìn)行變量本身的左值連續(xù)運(yùn)算后增量運(yùn)算符分析:運(yùn)算后表達(dá)式結(jié)果和變量自身結(jié)果的不一致,且不允許進(jìn)行變量本身的左值連續(xù)運(yùn)算處理方法:使參數(shù)和返回值類型不同舉例:f0806后增量運(yùn)算符重載時的編譯特殊處理:實(shí)參和形參個數(shù)不一致8.3操作符2/5/202318運(yùn)算符重載的成員函數(shù)化處理成員函數(shù)形式的操作符重載:PointPoint::operator+(constPoint&d)const{Points;
s.set(x+d.x,y+d.y);returns;}普通函數(shù)形式的操作符重載:
Pointoperator+(constPoint&a,constPoint&b)const{Points;
s.set(a.x+b.x,a.y+b.y);returns;}8.3操作符2/5/202319運(yùn)算符重載的成員函數(shù)化處理無論是成員函數(shù)形式的重載還是普通函數(shù)形式的重載:p+q等價于成員操作符p.operator+(q),或者普通操作符operator(p,q)兩者必居其一.成員函數(shù)形式的運(yùn)算符重載的必要條件:某個操作數(shù)是當(dāng)前類的對象<<不可以成為成員函數(shù)形式重載的原因8.3操作符2/5/2023208.4再論程序結(jié)構(gòu)訪問控制成員函數(shù)一般為公有public。公有的成員函數(shù)在類的外部可以被使用,即外界可以調(diào)用成員函數(shù).?dāng)?shù)據(jù)成員一般為私有private。私有的數(shù)據(jù)成員在外部不能被訪問,即外界不能訪問對象的數(shù)據(jù)分量,而只能由成員函數(shù)內(nèi)部去處理.公有和私有可任意設(shè)定訪問控制public和private是語言提供給程序員的功能:類的內(nèi)部和外部被隔絕類的界面(接口):類全部公有成員函數(shù)的聲明2/5/2023218.4再論程序結(jié)構(gòu)類的程序結(jié)構(gòu)舉例:f0809類定義作為頭文件,如:point.h類的實(shí)現(xiàn)作為獨(dú)立編譯單元,如:point.cpp使用類的程序作為另一獨(dú)立編譯單元,如:f0809.cpp類的頭文件和類的實(shí)現(xiàn)可以作為一個獨(dú)立的資源提供給編程者.內(nèi)聯(lián)的成員函數(shù)定義一般放在頭文件中.頭文件中必須使用頭文件衛(wèi)士技術(shù).2/5/202322類作用域和類定義作用域類定義作用域:從類定義結(jié)束開始,到從外面包圍類定義的塊結(jié)束(若類定義外無包圍塊,則結(jié)束于文件);使用類的程序員在類定義作用域下編程類作用域:類定義內(nèi)部及成員函數(shù)定義內(nèi)部;實(shí)現(xiàn)類的程序員在類作用域下編程舉例(f0810)類作用域中成員變量被局部變量屏蔽的現(xiàn)象及其理解類作用域其實(shí)是類定義作用域的子集8.4再論程序結(jié)構(gòu)2/5/2023238.5屏蔽類的實(shí)現(xiàn)使用類的應(yīng)用程序只需要類定義頭文件編程實(shí)現(xiàn)類,也只需要類定義頭文件,不需要使用類的程序細(xì)節(jié)確定了類定義(頭文件),便可以從事兩方面的編程而互不干涉.類定義成功地屏蔽了類的實(shí)現(xiàn),是類機(jī)制的技術(shù)體現(xiàn).舉例2/5/2023248.6靜態(tài)成員8.6.1靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員的需要性類中屬性的共有性使用全局變量來解決屬性共有性問題的缺陷應(yīng)該屬于類,但不能使用普通成員變量的形式來實(shí)現(xiàn)屬性共有舉例:f08122/5/202325靜態(tài)數(shù)據(jù)成員的使用概念:屬于類的全部對象所有的靜態(tài)成員變量稱為靜態(tài)數(shù)據(jù)成員,它對于每個類而言只有一個實(shí)體,每個對象中不再有它的副本。定義方法:分為聲明和定義初始化兩個形式舉例:f0813合理的靜態(tài)數(shù)據(jù)成員定義初始化位置類定義頭文件(類定義體內(nèi)部和外部):KOMain函數(shù)所在文件的的開頭:KO類定義內(nèi)部實(shí)現(xiàn)部分(即成員函數(shù)定義的位置):OK8.6靜態(tài)成員2/5/2023268.6.2靜態(tài)成員函數(shù)調(diào)用時,不捆綁對象,所以,不能直接操作對象和其成員,若需訪問該類對象,必須以參數(shù)傳遞之.靜態(tài)成員函數(shù)一般設(shè)計(jì)為公有的,以訪問私有靜態(tài)數(shù)據(jù)成員為目的.靜態(tài)成員函數(shù)一般不能訪問普通成員變量調(diào)用方式是以類名加域操作符::后跟靜態(tài)成員函數(shù).舉例:f08148.6靜態(tài)成員2/5/2023278.7友元友元的概念需要使用友元的原因:某些類以外的函數(shù)(如普通函數(shù)等)需要直接訪問某個類的保護(hù)或私有成員需要使用友元的目的:提高效率友元使用的后果:破壞了類的封裝特性(除特殊情況,不推薦使用)舉例(f0815):若以普通函數(shù)的身份實(shí)現(xiàn),則要大量調(diào)用成員函數(shù)去訪問私有數(shù)據(jù)成員,而用友元之后,可
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工培訓(xùn)計(jì)劃與資源模板
- 多項(xiàng)目管理統(tǒng)籌的標(biāo)準(zhǔn)化流程
- 2025內(nèi)蒙古鄂溫克族自治旗融媒體中心多元化崗位招聘2人考前自測高頻考點(diǎn)模擬試題及答案詳解(新)
- 改編音樂的考試題及答案
- 醫(yī)師衛(wèi)生職稱考試試題及答案
- 2025福建省市場監(jiān)督管理局直屬事業(yè)單位招聘高層次人才20人考前自測高頻考點(diǎn)模擬試題及答案詳解(典優(yōu))
- 2025年北京高教崗前培訓(xùn)考試題及參考答案
- 2025年保育員鑒定題庫及答案
- 守秘義務(wù)與信息安全保障保證承諾書9篇
- 項(xiàng)目成本分析與控制工具包
- 2025至2030中國海帶膠行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 孕產(chǎn)婦全程保健指南
- 航空理論教學(xué)課件
- 【MOOC答案】《VLSI設(shè)計(jì)基礎(chǔ)(數(shù)字集成電路設(shè)計(jì)基礎(chǔ))》(東南大學(xué))章節(jié)作業(yè)慕課答案
- 中國兒童食管狹窄診治專家共識解讀 2
- 注塑質(zhì)量管理辦法
- 數(shù)字治理培訓(xùn)課件
- 軍品配套項(xiàng)目管理辦法
- TCSF00782023森林草原消防無人機(jī)巡護(hù)作業(yè)技術(shù)規(guī)程
- DB62∕T 4964-2024 地質(zhì)災(zāi)害精細(xì)調(diào)查技術(shù)規(guī)范
- 2025年七一黨課-作風(fēng)建設(shè)永遠(yuǎn)在路上學(xué)習(xí)教育黨課
評論
0/150
提交評論