版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章
類的更多功能
上一章介紹了一些C++提供自定義數(shù)據(jù)類型,其中重點(diǎn)介紹了類和對象。本章將繼續(xù)討論類和對象。使用對象,創(chuàng)建對象數(shù)組通過指針和引用操作對象this指針的使用類的靜態(tài)成員復(fù)制構(gòu)造函數(shù)類的友元重載運(yùn)算符類模板在C++/CLI中重載運(yùn)算符
9.1對象數(shù)組
與普通數(shù)組一樣,可以通過一個對象數(shù)組保存將一組對象。對象數(shù)組的聲明方式與普通數(shù)組完全相同,例如下面聲明了一個Cube類對象的對象數(shù)組:CubeobjArray[5];該語句聲明了一個可以包含5個Cube對象的數(shù)組,在對象數(shù)組中的每個元素都會調(diào)用類的默認(rèn)構(gòu)造函數(shù)創(chuàng)建對象。
9.2對象的指針與引用
在面向?qū)ο缶幊讨?,類的對象與引用非常重要。因?yàn)轭悓ο笸ǔ1容^大,如果按值傳遞對象將非常耗時,這需要復(fù)制一個對象。傳遞對象的地址和引用則可以有效地避免這種情況。
9.2.1對象的指針
可以像聲明其他指針變量一樣,聲明指向類對象的指針變量。例如,下面的這條語句聲明了一個指向Cube類對象的指針變量:Cube*pCube=0;聲明指向Cube類對象的指針變量后,就可以向Cube對象的地址保存到該指針變量:CubebigCube(4.6,4.2,6.2);pCube=&bigCube;通過對象指針訪問對象的成員時,需要使用一個新的運(yùn)算符——間接成員訪問運(yùn)算符“->”。
9.2.2對象的引用
在實(shí)際中,使用對象引用作函數(shù)參數(shù)要比使用對象指針作更普遍,這是因?yàn)槭褂脤ο笠米骱瘮?shù)形參時,不僅具有用對象指針作函數(shù)參數(shù)的優(yōu)點(diǎn),而還可以避免復(fù)雜指針運(yùn)算,從而更簡單、更直接。
9.3this指針
任何成員函數(shù)在執(zhí)行時都有一個隱含的this指針,它指向調(diào)用該函數(shù)的對象。如果需要,也可以在成員函數(shù)中顯式地使用this指針。
9.4類的靜態(tài)成員
類的數(shù)據(jù)成員和函數(shù)成員可以被聲明為靜態(tài)static。類的靜態(tài)成員也稱為類成員,因?yàn)樗鼈儾恍枰獎?chuàng)建類的對象就可以訪問。
9.4.1靜態(tài)數(shù)據(jù)成員
將類的某個數(shù)據(jù)成員聲明為static后,該數(shù)據(jù)成員就變?yōu)轭惖撵o態(tài)數(shù)據(jù)成員。靜態(tài)數(shù)據(jù)成員它屬于整個類,而不像普通數(shù)據(jù)成員一樣屬于某個對象。也就是說,類的靜態(tài)數(shù)據(jù)成員不依賴于類創(chuàng)建的對象,通過類就可以訪問。
9.4.2靜態(tài)成員函數(shù)除靜態(tài)數(shù)據(jù)成員外,C++也允許定義static成員函數(shù)。靜態(tài)的數(shù)據(jù)成員被所有的對象共享,也就是說,靜態(tài)數(shù)據(jù)成員不屬于對象,而是屬于類的。與靜態(tài)數(shù)據(jù)成員類似,靜態(tài)成員函數(shù)也是屬于類的。靜態(tài)成員函數(shù)僅能訪問靜態(tài)的數(shù)據(jù)成員,不能訪問非靜態(tài)的數(shù)據(jù)成員,也不能訪問非靜態(tài)的成員函數(shù),因?yàn)殪o態(tài)成員可以不創(chuàng)建對象直接通過類本身訪問,這時并沒有創(chuàng)建非靜態(tài)的成員,因此無法訪問。
9.5復(fù)制構(gòu)造函數(shù)
復(fù)制構(gòu)造函數(shù)的作用就是通過同類的現(xiàn)有對象,創(chuàng)建另一個對象。默認(rèn)的復(fù)制構(gòu)造函數(shù)是通過一個成員一個成員地復(fù)制現(xiàn)有對象,來創(chuàng)建新對象。
9.6類的友元
在正常情況下,類的數(shù)據(jù)成員被聲明為私有成員,以隱藏它們。有時還可以把某此特定的函數(shù)看作類的“榮譽(yù)成員”,允許它們訪問類對象中非公有的成員,這種函數(shù)就稱為類的友元。友元可以訪問類對象的任意成員,無論這些成員的訪問控制特性是什么。類的友元可以分為兩種:友元函數(shù)和友元類。友元類的所有成員函數(shù)與原類的一般成員具有相同的訪問權(quán)限。
9.6.1類的友元函數(shù)
如果某個函數(shù)不是類的一個成員,但可以訪問類的所有成員,這個函數(shù)就稱為該類的友元函數(shù)。在聲明友元函數(shù)時,必須在類定義中用關(guān)鍵字friend標(biāo)識??梢栽陬惗x中添加友元函數(shù)的原型,也可以類定義內(nèi)部添加整個友元函數(shù)。雖然友元函數(shù)在類內(nèi)部聲明,但它不是類的成員,因此訪問控制特性不適用它們。
9.6.2友元類
除了將某個函數(shù)聲明為類的友元外,還可以將整個類聲明為另一個類的友元類。友元類的所有成員函數(shù)都可以不受限地訪問原類的成員。友元關(guān)系不是雙向的。類之間的友元關(guān)系也是不可傳遞的,即類A是類B的友元類,類B又是類C的友元,但類A不是類C的友元。
9.7重載運(yùn)算符重載
重載運(yùn)算符是C++的一個重要特性。在C++中,用戶定義的數(shù)據(jù)類型與基本數(shù)據(jù)類型int等一樣,基本數(shù)據(jù)類型可以使用標(biāo)準(zhǔn)運(yùn)算符(如+、–、*、/)進(jìn)行運(yùn)算,那么如何使用標(biāo)準(zhǔn)運(yùn)算符實(shí)現(xiàn)自定義數(shù)據(jù)類型的運(yùn)算呢?這就需要重載運(yùn)算符。
9.7.1重載運(yùn)算符的概述
實(shí)際上任何用重載運(yùn)算符完成的工作都可以使用成員函數(shù)來實(shí)現(xiàn)。重載的運(yùn)算符可以和原來的運(yùn)算符含義不同。例如,重載“+”運(yùn)算符,使它可以不做加法運(yùn)算,而是把字符串連接起來。當(dāng)然,也可以用“+”運(yùn)算符來做減法運(yùn)算,但是通造成理解上的混亂。幾乎所有的運(yùn)算符都可以重載。具體包括:(1)算術(shù)運(yùn)算符+、-、*、/、%、++、--。(2)位操作運(yùn)算符&、|、~、^、<<、>>。(3)邏輯運(yùn)算符!、&&、||。(4)比較運(yùn)算符
<、>、>=、<=、==、!=。(5)賦值運(yùn)算符=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。(6)其他運(yùn)算符[]、()、->、,(逗號運(yùn)算符)、new、delete。除此之外,C++也規(guī)定了一些運(yùn)算符不能夠重載,例如:成員訪問運(yùn)算符“.”,作用域運(yùn)算符“::”指針間接運(yùn)算符“.*”,間接成員訪問運(yùn)算符“->”,條件運(yùn)算符“?:”。
9.7.2重載雙目運(yùn)算符
為了使用運(yùn)算符對某個自定義類對象進(jìn)行處理,就需要為該類添加一個特殊的函數(shù),實(shí)現(xiàn)運(yùn)算符的重載。假設(shè)為Cube類重載大于“>”運(yùn)算符,從而可以使用大于“>”運(yùn)算符比較兩個Cube類對象的體積: booloperator>(constCube&aCube)const { returnthis->Volume()>aCube.Volume(); }在這里的關(guān)鍵字operator表示重載運(yùn)算符,operator與后面的運(yùn)算符組合表示重載的運(yùn)算符,這里重載了大于“>”運(yùn)算符。實(shí)際上,operator>就構(gòu)成一個特殊的函數(shù)名。在operator>運(yùn)算符函數(shù)中,運(yùn)算符右邊接作數(shù)由函數(shù)定義的形式參數(shù)確定,左邊操作數(shù)則由this指針隱式確定。
9.7.3重載增量運(yùn)算符
自增1和自減1運(yùn)算符是單目運(yùn)算符,它們又有前綴和后綴運(yùn)算兩種形式,并且結(jié)果取決于是前綴還是后綴。為了區(qū)分這兩種運(yùn)算,可以將后綴運(yùn)算視為雙目運(yùn)算符。則表達(dá)式:obj++或obj--可以被看為obj=obj+1或obj=obj-1這樣,重載的后綴形式運(yùn)算符就需要一個int類型的形參,前綴形式?jīng)]有形參。后綴運(yùn)算符的形參只是為了將其同前綴形式區(qū)別開來,除此之外它在函數(shù)實(shí)現(xiàn)中沒有任何意義。
9.8類模板
類模板與前面介紹過的函數(shù)模板類似。類模板本身不是類,而只是編譯器用來生成類代碼的一種“配方”。與函數(shù)模板一樣,類模板也是通過指定尖括號內(nèi)的形參類型來確定創(chuàng)建的類,如右圖所示。
9.8.1定義類模板
類模板有許多應(yīng)用,最常見的應(yīng)用是定義容器類。容器類是包含以特定方式組織起來的給定類型的對象集合。例如,對象數(shù)組,對象鏈表。當(dāng)類模板的成員函數(shù)在外部定義時,必須指定成員函數(shù)的類模板類型,并且指定與類模板具有相同類型參數(shù)的函數(shù)模板。
9.9C++/CLI的應(yīng)用
C++/CLI支持運(yùn)算符的重載,但有一些區(qū)別。首先不能在數(shù)值類中重載賦值運(yùn)算符,因?yàn)閷?shù)值類對象賦值給另一個同為對象的過程序已經(jīng)定義為逐成員進(jìn)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消防合作協(xié)議書
- 宜陽雙十一促銷活動策劃
- 2025教師灶廚師聘用合同書
- 尺橈骨骨折護(hù)理流程
- 2025借款合同的確認(rèn)函范本
- 汽車內(nèi)飾設(shè)計師職責(zé)概述
- 2025房地產(chǎn)買賣的合同范本
- 臨床醫(yī)學(xué)科研成果匯報
- 紡織行業(yè)紡織工藝培訓(xùn)總結(jié)
- 2025林地租賃合同范文
- 燃?xì)庥邢薰竟こ滩抗芾碇贫葏R編
- 2024年中國干粉涂料市場調(diào)查研究報告
- (自考)經(jīng)濟(jì)學(xué)原理中級(政經(jīng))課件 第二章 商品和貨幣
- ×××老舊小區(qū)改造工程施工組織設(shè)計(全面)
- 調(diào)解行業(yè)可行性分析報告
- 科創(chuàng)板知識題庫試題及答案
- GB/T 3324-2024木家具通用技術(shù)條件
- NGS二代測序培訓(xùn)
- 《材料合成與制備技術(shù)》課程教學(xué)大綱(材料化學(xué)專業(yè))
- 小紅書食用農(nóng)產(chǎn)品承諾書示例
- 釘釘OA辦公系統(tǒng)操作流程培訓(xùn)
評論
0/150
提交評論