日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]C++中的友元概念是為了將類的私有不可見部分暴露給有權(quán)限訪問的人(包括類,類中的成員函數(shù),全局函數(shù))采用類的機(jī)制后實現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此

C++中的友元概念是為了將類的私有不可見部分暴露給有權(quán)限訪問的人(包括類,類中的成員函數(shù),全局函數(shù))

采用類的機(jī)制后實現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時需要定義一些函數(shù),這些函數(shù)不是類的一部分(注意友元函數(shù)不是類的一部分),但又需要頻繁地訪問類的數(shù)據(jù)成員,這時可以將這些函數(shù)定義為該函數(shù)的友元函數(shù)。除了友元函數(shù)外,還有友元類,兩者統(tǒng)稱為友元。友元的作用是提高了程序的運(yùn)行效率(即減少了類型檢查和安全性檢查等都需要時間開銷),但它破壞了類的封裝性和隱藏性,使得非成員函數(shù)可以訪問類的私有成員。

對于類作為(某類的)友元對象的情況:
這個友元類是否要定義在某類前不做限制,只要這個友元類是在某類的作用域范圍內(nèi)可見即可。
class Window_Mgr
{
public:
??? Window_Mgr& relocate()
??? {
??? }
};

class Sreen
{
??? friend class Window_Mgr;//將Window_Mgr類作為友元對象,這樣Window_Mgr類可以使用Screen類的私有部分
private:
??? int width;//可以被Window_Mgr類使用,因為Window_Mgr類是Screen類的友元;下面height同理
??? int height;
};


對于類成員函數(shù)作為(某類的)友元函數(shù)的情況:必須先定義準(zhǔn)備作為友元的類及相應(yīng)的成員函數(shù),這樣才能被某類作為友元函數(shù),格式如下:
class Window_Mgr
{

public:
????Window_Mgr& relocate(Screen::index r, Screen::index c, Screen& s);//這個函數(shù)需要在Screen類定義前先定義,這樣被Screen類設(shè)為友元函數(shù)
...
};

class Screen
{
??? friend Window_Mgr& Window_Mgr::relocate(Window_Mgr::index, Window_Mgr::index, Screen&);//函數(shù)名必須用改函數(shù)所屬的類名加以限定,這樣才能正確定位到特定函數(shù)
...
};


全局函數(shù)作為(某類的)友元函數(shù)的情況:
這個全局函數(shù)是否要定義在某類前不做限制,只要這個全局函數(shù)是在某類的作用域范圍內(nèi)可見即可。
這個全局函數(shù)可以在某類內(nèi)部定義,這個全局函數(shù)的作用域擴(kuò)展到包圍某類定義的作用域
class X
{
friend void f()
{
??????? /*function body*/
}
...
};

class Y
{
?void g()
{
return ::f();
}
};

在重載函數(shù)的情況中:
某類必須將每一個希望成為(某類的)友元函數(shù)分別聲明,不會出現(xiàn)聲明了某一個函數(shù)為(某類的)友元函數(shù),其他重載函數(shù)都成為(某類的)友元函數(shù)的情況。即友元函數(shù)的聲明具有針對性。



?? ??

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉