版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C+中的指針用法大搜羅_ 在C+中,指針用得比較多,對于里面眾多的指針用法,不免弄得有些糊涂,自從我從圖書館里借到一本譚浩強(qiáng)教授主編的C+面對對象程序設(shè)計(jì)后,才幫我理清了思路?,F(xiàn)把部分內(nèi)容呈現(xiàn)給大家,盼望對大家有所關(guān)心。 C+程序設(shè)計(jì)重要基礎(chǔ)就是類和對象,對象指針是很重要的一部分,包括指向?qū)ο蟮闹羔?、指向?qū)ο蟪蓡T的指針、this指針、指向?qū)ο蟮某V羔槨⒅赶虺ο蟮闹羔樀取?1、指向?qū)ο蟮闹羔?定義:對象空間的起始地址就是對象的指針。 說明:在建立對象時(shí),編譯系統(tǒng)就為每個(gè)對象安排肯定的存儲空間以存放其成員,不過留意,在一般狀況下不同對象的數(shù)據(jù)存儲單元中存放的數(shù)據(jù)成員是不相同,而不同對象的函數(shù)代碼
2、卻是相同的,也就是說,它們的函數(shù)代碼是共享的。這時(shí)我們可以定義一個(gè)指針變量用來存放對象的指針。 定義指向類對象的指針變量的一般形式是: 類名 *對象指針名; 如對于與個(gè)Time類對象,我們可以有: Time t; Time *p; p=t; 我們就可以通過對象指針訪問對象和對象的成員,假如所定義的類中有數(shù)據(jù)成員hour、minute、sec,成員函數(shù)有g(shù)ettime(),則 (*p).hour 即為p指向?qū)ο笾械膆our成員,相當(dāng)于t.hour (*p).gettime() 即為p指向?qū)ο笾械某蓡T函數(shù)gettime(),相當(dāng)于t.gettime() 也可以用如下形式: p-hour 和 p-g
3、ettime()和上面是等價(jià)的。 2、指向?qū)ο蟪蓡T的指針 (1)指向?qū)ο髷?shù)據(jù)成員的指針 在C中我們學(xué)過指向一般變量的指針變量,在C+中定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向一般變量的指針變量方法相同,其一般形式為: 數(shù)據(jù)類型名 *指針變量名; 如: int *p; p=t.hour; /將對象t的數(shù)據(jù)成員hour的地址賦給p,p指向t.hour (2)指向?qū)ο蟪蓡T函數(shù)的指針 定義指向?qū)ο蟪蓡T函數(shù)的指針變量和定義指向一般函數(shù)的指針變量不同。 在定義指向一般函數(shù)的指針變量時(shí)我們可以這樣定義: void (*p)(); p=fun; (*p)(); /調(diào)用fun函數(shù) 然而編譯系統(tǒng)要求在將函數(shù)
4、地址賦給指針變量時(shí)必需滿足三個(gè)條件: 函數(shù)參數(shù)類型及個(gè)數(shù)要匹配 函數(shù)返回值的類型要匹配 所屬的類要匹配 明顯在上面的p與類是無關(guān)的。為了滿足第三條,我們可以為指針指定類,故定義指向?qū)ο蟪蓡T函數(shù)的指針變量一般形式為: 數(shù)據(jù)類型(類名:*指針變量名)(參數(shù)表列); 可以讓指針指向公用的成員函數(shù),如: void (Time:*p)(); /定義指向Time類對象成員函數(shù)的指針變量p p=Time:gettime; /把Time類的公用成員函數(shù)gettime()地址賦給指針變量p (t.*p)(); /調(diào)用Time類對象t的成員函數(shù)gettime() 留意:由于成員函數(shù)不存放在對象空間中,多個(gè)同類對象
5、共享此成員函數(shù)代碼,所以在將成員函數(shù)的入口地址賦給指針變量是應(yīng)寫成: 指向?qū)ο蟪蓡T函數(shù)的指針變量=類名:成員函數(shù)名; 在成員函數(shù)名后面沒有(),假如寫成p=Time:gettime()是錯(cuò)誤的。nextp 3、this指針 在每個(gè)成員函數(shù)中都包含了一個(gè)特別的指針,稱為this,它是指向本類對象的指針,它的值是當(dāng)前被調(diào)用成員函數(shù)所在對象的起始地址。之所以有這個(gè)指針,是由于為了保證同類的不同對象的成員函數(shù)引用的是指定對象中的數(shù)據(jù)成員,它是系統(tǒng)自動實(shí)現(xiàn)的。 如定義一個(gè)求體積的函數(shù) int box:vol() return(height*width*length); 假如已經(jīng)定義了對象t,當(dāng)調(diào)用成員函
6、數(shù)t.vol()時(shí),編譯系統(tǒng)就把對象t的起始地址賦給this指針,于是在成員函數(shù)引用數(shù)據(jù)成員時(shí),依據(jù)指針this就可以引用到對象t的數(shù)據(jù)成員。所以C+把上面的函數(shù)處理成 int box:vol() return(this-height*this-width*this-length); 由于this的值是當(dāng)前被調(diào)用成員函數(shù)所在對象的起始地址,所以可以寫成 int box:vol() return(*this).height*(*this).width*(*this).length); 所以在調(diào)用成員函數(shù)t.vlo()時(shí),實(shí)際的調(diào)用方式為t.vol(t),不過對象t的地址傳給this指針是由系統(tǒng)自
7、動完成的,不需人為加上。 4、指向?qū)ο蟮某V羔?將指向?qū)ο蟮闹羔樧兞柯暶鳛閏onst型且進(jìn)行處始化,這樣指針值始終保持為其初值,不能轉(zhuǎn)變其指向。 如: Time t1(8,8,8),t2; Time *const p=t1; /常指針p指向?qū)ο髏1 p=t2; /試圖轉(zhuǎn)變p的指向,非法 由上面我們可以看出定義指向?qū)ο蟮某V羔樀囊话阈问綖椋?類名 *const 指針變量名=對象的起始地址; 留意:指向?qū)ο蟮某V羔樧兞康闹挡荒苻D(zhuǎn)變,但可以轉(zhuǎn)變它所指向?qū)ο笾械臄?shù)據(jù)成員的值。 常指針一般用作函數(shù)的參數(shù),這樣就不允許在函數(shù)執(zhí)行過程中轉(zhuǎn)變指針變量的值,使其始終保持指向原來的對象。 5、指向常對象的指針變量
8、 首先回顧一下指向常變量的指針變量,其一般形式為: const 類型名 *指針變量名; 如: const char *p; 假如一個(gè)變量已經(jīng)被聲明為常變量,那么只能用指向常變量的指針變量去指向它,而不能用一般的指針變量。另外,指向常變量的指針變量除了可以指向常變量外,還可以指向未被聲明為const的變量,但也不能通過該指針轉(zhuǎn)變其值。例如: char c=a /定義字符變量c,未聲名為const const char *p; /定義指向常變量的指針變量p p=c; /p指向字符變量c *p=b; /非法 c=b; /合法 說明:上例中,指針變量p指向字符變量c,并不說把c也聲明成常變量,而只是說
9、在通過指針變量引用c時(shí),c具有常變量的特征,其值是不能轉(zhuǎn)變的,但c仍舊是一個(gè)一般變量。 在指向常變量的指針中,關(guān)于函數(shù)形參的指針類型有幾點(diǎn)值得留意: 假如函數(shù)形參是非const型指針變量,實(shí)參只能用指向非const型指針;假如函數(shù)形參是指向const型變量的指針,實(shí)參則可以是const型的或非const型的指針變量。換句話說就是指向常變量的指針可以指向const和非const型的變量,而指向非const型變量的指針只能指向非const的變量。 用指針變量作形參時(shí)形參和實(shí)參的對應(yīng)關(guān)系表 形參實(shí)參合法與否轉(zhuǎn)變指針?biāo)笇ο蟮闹?指向非const型變量的指針非const變量的地址合法行 指向非cons
10、t型變量的指針const變量的地址非法/ 指向const型變量的指針const變量的地址合法不行 指向const型變量的指針非const變量的地址合法不行 下面說到正題,指向常對象的指針變量和指向常變量指針變量類似。 假如一個(gè)對象已經(jīng)被聲明為長對象,只能用指向常對象的指針變量指向它,而不能用一般的指針變量指向它。 假如定義了一個(gè)指向常對象的指針變量且使它指向一個(gè)非const的對象,其指向的對象不能通過指針來轉(zhuǎn)變。 假如定義了一個(gè)指向常對象的指針變量,是不能通過它轉(zhuǎn)變所指向的對象的值的,但是指針變量本身的值是可以轉(zhuǎn)變的。 如: Time t1(8,8,8),t2; /定義對象 const time *p=t1; /定義指向常對象的指針p,并使它指向t1 p=t2; /合法,指針p指向?qū)ο髏2 所以當(dāng)我們盼望在調(diào)用函數(shù)時(shí)對象的值不被修改,我們就可以把形參定義為const型的指針變量,同時(shí)用對象的地址作實(shí)參(對象可以是const或非cons
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年適用型房地產(chǎn)勞動協(xié)議范例
- 2024商鋪局部改造施工協(xié)議樣本
- 2024年數(shù)據(jù)保護(hù)與信息安全保密協(xié)議
- 2024年合作投資資金安排協(xié)議
- 2024年項(xiàng)目顧問協(xié)議模板詳解
- 2024非金融機(jī)構(gòu)借款協(xié)議示例
- 2024年商用中央空調(diào)購銷協(xié)議要約
- 2024年度工程設(shè)計(jì)協(xié)議格式
- 2024年定制門衛(wèi)勞務(wù)服務(wù)協(xié)議范本
- 2024年公司重組并購協(xié)議示例
- 資產(chǎn) 評估 質(zhì)量保證措施
- 小學(xué)二年級上冊道德與法治-9這些是大家的-部編ppt課件
- 《礦山機(jī)械設(shè)備》復(fù)習(xí)題
- 冷庫工程特點(diǎn)施工難點(diǎn)分析及對策
- 中國古代樓閣PPT課件
- 排舞教案_圖文
- 簡單趨向補(bǔ)語:V上下進(jìn)出回過起PPT課件
- 超聲檢測工藝卡
- 公司“師帶徒”實(shí)施方案
- 《內(nèi)科護(hù)理學(xué)》病例分析(完整版)
- 5GQoS管理機(jī)制介紹
評論
0/150
提交評論