版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++超詳細(xì)講解友元與內(nèi)部類目錄一.友元1.友元函數(shù)(1)引入原因(2)友元函數(shù)作用(3)友元函數(shù)特征2.友元類(1)解釋(2)友元類特征二.內(nèi)部類(不常用)1.概念2.特性
一.友元
友元分為:友元函數(shù)和友元類
友元提供了一種突破封裝的方式,有時(shí)提供了便利。但是友元會(huì)增加耦合度,破壞了封裝,所以友元不宜多用。
1.友元函數(shù)
(1)引入原因
operator:因?yàn)閏out的輸出流對(duì)象和隱含的this指針在搶占第一個(gè)參數(shù)的位置。this指針默認(rèn)是第一個(gè)參數(shù)也就是左操數(shù)了。但是實(shí)際使用中cout需要是第一個(gè)形參對(duì)象,才能正常使用。所以我們要將operator重載成全局函數(shù)。但是這樣的話,又會(huì)導(dǎo)致類外沒辦法訪問成員,那么這里就需要友元來解決。operator同理。
(2)友元函數(shù)作用
友元函數(shù)可以直接訪問類的私有成員,它是定義在類外部的普通函數(shù),不屬于任何類,但需要在類的內(nèi)部聲明,聲明時(shí)需要加friend關(guān)鍵字。
#includeiostream
usingnamespacestd;
classDate
//友元函數(shù)
friendostreamoperator(ostreamout,constDated);
public:
private:
int_year;
int_month;
int_day;
ostreamoperator(ostreamout,constDated)
outd._year"/"d._month"/"d._dayendl;
returnout;
intmain()
Dated;
//dcout;
coutd;
return0;
}
(3)友元函數(shù)特征
【1】友元函數(shù)可訪問類的私有和保護(hù)成員,但不是類的成員函數(shù)
【2】友元函數(shù)不能用const修飾(因?yàn)闆]有this指針)
【3】友元函數(shù)可以在類定義的任何地方聲明,不受類訪問限定符限制,放在public,private中都行,不放這兩個(gè)里面放在最前面也行,一般都是定義最前面的
【4】一個(gè)函數(shù)可以是多個(gè)類的友元函數(shù)
【5】友元函數(shù)的調(diào)用與普通函數(shù)的調(diào)用和原理相同
2.友元類
(1)解釋
classDate;//前置聲明:因?yàn)榫幾g器是向上查找,在Time類中
classTime
//友元類
friendclassDate;
聲明日期類為時(shí)間類的友元類,則在日期類中就可以直接訪問Time類中的私有成員變量
public:
Time(inthour=0,intminute=0,intsecond=0)
:_hour(hour)
,_minute(minute)
,_second(second)
private:
int_hour;
int_minute;
int_second;
classDate
public:
Date(intyear=1900,intmonth=1,intday=1)
:_year(year)
,_month(month)
,_day(day)
voidSetTimeOfDate(inthour,intminute,intsecond)
//直接訪問時(shí)間類私有的成員變量
_t._hour=hour;
_t._minute=minute;
_t._second=second;
private:
int_year;
int_month;
int_day;
Time_t;
};
在Date類中有一自定義成員變量Time_t;,成員函數(shù)SetTimeOfDate想訪問_t對(duì)象的成員變量,因?yàn)轭怲ime中的成員變量是私有的,所以正常情況無法訪問,則需要借助友元類:
想在Date類中訪問Time類對(duì)象的私有成員變量,就需要在類Time中聲明日期類為時(shí)間類的友元類,則在日期類中就可以直接訪問Time類中的私有成員變量。
格式:friendclassDate;
(在Date類中訪問Time類對(duì)象的成員變量:在Time類中寫日期類聲明并在前面加friend)
(2)友元類特征
【1】友元類的所有成員函數(shù)都可以是另一個(gè)類的友元函數(shù),都可以訪問另一個(gè)類中的非公有成員。
【2】友元關(guān)系是單向的,不具有交換性。比如上述Time類和Date類,在Time類中聲明Date類為其友元類,那么可以在Date類中直接訪問Time類的私有成員變量,但想在Time類中訪問Date類中私有的成員變量則不行。
【3】友元關(guān)系不能傳遞如果B是A的友元,C是B的友元,則不能說明C時(shí)A的友元。
二.內(nèi)部類(不常用)
1.概念
如果一個(gè)類定義在另一個(gè)類的內(nèi)部,這個(gè)內(nèi)部類就叫做內(nèi)部類。
注意:此時(shí)這個(gè)內(nèi)部類是一個(gè)獨(dú)立的類,它不屬于外部類,更不能通過外部類的對(duì)象去調(diào)用內(nèi)部類。外部類對(duì)內(nèi)部類沒有任何優(yōu)越的訪問權(quán)限。
注意:內(nèi)部類就是外部類的友元類。注意友元類的定義,內(nèi)部類可以通過外部類的對(duì)象參數(shù)來訪問外部類中的所有成員。但是外部類不是內(nèi)部類的友元。
2.特性
1.內(nèi)部類可以定義在外部類的public、protected、private都是可以的。
2.注意內(nèi)部類可以直接訪問外部類中的static、枚舉成員,不需要外部類的對(duì)象/類名。
3.sizeof(外部類)=外部類,和內(nèi)部類沒有任何關(guān)系
舉例:B是A的內(nèi)部類,B是A的友元,A不是B的友元,A的大小是4字節(jié),類A的大小不包含靜態(tài)變量k(存在靜態(tài)區(qū))和成員函數(shù)(存在公共代碼段)和內(nèi)部類B,類A的大小僅僅只有h,所以是4字節(jié)。
classA{
private:
staticintk;
inth;
public:
classB//內(nèi)部類
public:
voidfoo(constAa)
coutkendl;//B可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職煙草栽培與加工(煙草技術(shù)專題)試題及答案
- 2025年大學(xué)交通運(yùn)輸(物流運(yùn)輸規(guī)劃)試題及答案
- 2025年大學(xué)農(nóng)村電氣技術(shù)(農(nóng)村新能源利用)試題及答案
- 2026年生物科技(基因編輯技術(shù))試題及答案
- 2025年高職獸醫(yī)服務(wù)(服務(wù)技術(shù))試題及答案
- 2025年高職(野生動(dòng)植物資源保護(hù)與利用)野生動(dòng)物監(jiān)測(cè)試題及答案
- 2025年中職護(hù)理(老年護(hù)理)試題及答案
- 2025年高職電網(wǎng)監(jiān)控技術(shù)(電網(wǎng)監(jiān)控操作)試題及答案
- 2025年高職(中藥購銷員)中藥銷售綜合測(cè)試題及答案
- 2025年高職(現(xiàn)代農(nóng)業(yè)技術(shù))精準(zhǔn)農(nóng)業(yè)種植試題及答案
- 商超信息系統(tǒng)操作規(guī)定
- 如何做好一名護(hù)理帶教老師
- 房地產(chǎn)項(xiàng)目回款策略與現(xiàn)金流管理
- 花溪區(qū)高坡苗族鄉(xiāng)國土空間總體規(guī)劃 (2021-2035)
- 非連續(xù)性文本閱讀(中考試題20篇)-2024年中考語文重難點(diǎn)復(fù)習(xí)攻略(解析版)
- 專題13 三角函數(shù)中的最值模型之胡不歸模型(原卷版)
- 門診藥房西藥管理制度
- 新能源汽車生產(chǎn)代工合同
- 2025年中煤科工集團(tuán)重慶研究院有限公司招聘筆試參考題庫含答案解析
- 消防救援預(yù)防職務(wù)犯罪
- 一體化泵站安裝施工方案
評(píng)論
0/150
提交評(píng)論