友元函式是全域性函式麼,C 成員函式 全域性函式 友員函式的區別

2022-03-12 16:34:17 字數 3493 閱讀 3854

1樓:豆兒媽育兒

我這學期學了c++,對友元和友元函式有一點認識,提供以下內容,僅供參考。

(1)友元的來歷

根據類的封裝性,一般將資料成員宣告為私有成員,在外部不能直接訪問它,只能通過類的公有成員函式對私有成員進行訪問。有時,需要頻繁呼叫成員函式來訪問私有成員,這樣系統開銷就比較大。c++從高效的角度出發,提供了友元機制,使被宣告為友元的全域性函式或者其他類可以直接訪問當前類中的私有成員,又不改變其私有成員的訪問許可權。

(2)友元的作用

友元不是類的成員函式,但能直接訪問類的所有成員,又不改變受訪問類成員的訪問許可權,避免了頻繁呼叫類的成員函式。使用友元可以節約開銷,提高程式的效率。

(3)友元不一定是全域性函式

友元可以是一個全域性函式,也可以是一個類的成員函式,還可以是一個類。如果友元是函式,則稱為友元函式。如果友元是一個類,則稱為友元類。

友元類的所有成員函式都是友元函式,可以訪問被訪問類的所有成員。友元不是被訪問類的成員,所以它不受類的訪問許可權(public、private、protected)影響。友元宣告以關鍵字friend開始,注意只能出現在被訪問類的定義中。

不充一點:友元不是純物件導向的,那是因為友元並非被訪問類的成員卻可以任意修改類的私有成員,破壞了類的封裝性。

c++有點高深,好好學吧~~~~

2樓:

不一定friend只是在一個類裡面標識可以訪問這個類的私有成員的函式而已,只是一個宣告,這個函式可以是全域性函式,也可以是其他類的成員函式。

3樓:木子易小

正在弄類中友元函式過載的問題,如上所說,友元函式不一定是全域性變數

c++ 成員函式、全域性函式、友員函式的區別

4樓:匿名使用者

在定義類的時候,如果定義了一個public訪問級的函式,那麼這個函式就是這個類的成員函式,當然在類裡也可以定義private訪問級的函式,這種函式則只能叫工具函式而不能叫成員函式,因為他僅僅是為類的公共成員函式服務的。通過類的例項並不能訪問類的工具函式。全域性函式是定義在主函式和任何類定義之外的函式,這種函式在整個程式的任何地方都允許被呼叫。

但過多的全域性函式會增加程式的尺寸,使其變得慵忡。因為通過類的例項並不能訪問到類的私用資料成員(即private成員),這時如果在類定義之內定義了友元函式,在類的例項中就可以通過友元函式來訪問類的私用資料成員。

5樓:鹹酥餅乾

成員函式是你這個類裡定義的,全域性函式是整個程式中共用的,友元函式是你從別的類里加過來的

6樓:小小鳥兒飛飛

成員函式:可以訪問類的所有成員,第一個引數隱含為this;

全域性函式:只能訪問類的public成員。

友元函式:可以訪問類的所有成員的全域性函式。

為什麼友元函式寫在類當中,卻不能算是類的成員函式呢?能否從根本上解釋一下友元函式呢?

7樓:

友元函式有兩種,一種不屬於任何類的,這種其實和c的外部函式一樣屬於全域性函式!一種是其他某個類的成員函式!只有全域性性質的友元函式才會直接定義在類的內部!

友元函式雖然不是類的成員函式,卻是類的介面!和類關係密切,所以可以定義在類的內部!

8樓:

友元函式可以訪問類的公共屬性和私有屬性,而這個訪問許可權是由類賦予的,在類裡面用friend 關鍵字賦予這個函式的訪問許可權。

但友元函式的實現是在類外部實現的,友元函式本身不屬於類函式。

從這個意義上說,「把友元函式寫在類中」,只是告訴編譯器賦予這個外部函式訪問類屬性的許可權而已,但友元函式不屬於類的成員函式。

友元函式是不是類的成員函式?

9樓:典渟司空嘉言

不是成員函式,它是外面的函式,是為了能隨意訪問類的成員,比如private成員

10樓:蘑菇飯資訊

友元函式和類的成員函式都可以訪問類的私有成員變數或者是成員函式,但是他們呼叫的形式不同。

類的成員函式是屬於類的,所以呼叫的時候是通過指標this呼叫的。

而類的友元函式不屬於類,當然也不能有this指標了,也就是在友元函式中不能出現this指標。

同時友元函式是有關鍵字friend修飾。

再有的情況下,友元函式是很有用的。特別是在過載一些操作符的時候用處很明顯。

什麼叫友元函式?

11樓:清流疾風

友元函式和友元類

採用類的機制後實現了資料的隱藏與封裝,類的資料成員一般定義為私有成員,成員函式一般定義為公有的,依此提供類與外界間的通訊介面。但是,有時需要定義一些函式,這些函式不是類的一部分,但又需要頻繁地訪問類的資料成員,這時可以將這些函式定義為該函式的友元函式。除了友元函式外,還有友元類,兩者統稱為友元。

友元的作用是提高了程式的執行效率(即減少了型別檢查和安全性檢查等都需要時間開銷),但它破壞了類的封裝性和隱藏性,使得非成員函式可以訪問類的私有成員。

友元函式 :

友元函式是可以直接訪問類的私有成員的非成員函式。它是定義在類外的普通函式,它不屬於任何類,但需要在類的定義中加以宣告,宣告時只需在友元的名稱前加上關鍵字friend,其格式如下:

friend 型別 函式名(形式引數);

友元函式的宣告可以放在類的私有部分,也可以放在公有部分,它們是沒有區別的,都說明是該類的一個友元函式。

一個函式可以是多個類的友元函式,只需要在各個類中分別宣告。

友元函式的呼叫與一般函式的呼叫方式和原理一致。

友元類 :

友元類的所有成員函式都是另一個類的友元函式,都可以訪問另一個類中的隱藏資訊(包括私有成員和保護成員)。

當希望一個類可以存取另一個類的私有成員時,可以將該類宣告為另一類的友元類。定義友元類的語句格式如下:

friend class 類名;

其中:friend和class是關鍵字,類名必須是程式中的一個已定義過的類。

例如,以下語句說明類b是類a的友元類:

class a

;經過以上說明後,類b的所有成員函式都是類a的友元函式,能存取類a的私有成員和保護成員。

使用友元類時注意:

(1) 友元關係不能被繼承。

(2) 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定是類b的友元,要看在類中是否有相應的宣告。

(3) 友元關係不具有傳遞性。若類b是類a的友元,類c是b的友元,類c不一定是類a的友元,同樣要看類中是否有相應的申明

12樓:匿名使用者

就是說在類中的私有成員包括變數、函式等等只能是在自己的類中的成員才能使用,如果宣告某個函式是某個類的友元函式,友元也可以是類等等,那麼這個函式就可以直接使用該類的私有成員變數了(因為公有的本來就可以直接用了)。

13樓:匿名使用者

類中間加了friend宣告的全域性函式,在函式體中可以通過該類的物件名或者指標訪問該類的無論public、protected或者private成員

c成員函式是不是都是行內函數,內聯成員函式的優缺點 C

當然不是,或者說,除非特殊的inline宣告,類成員函式都不是行內函數。內聯成員函式的優缺點 c 行內函數必須是和函式體申明在一起,才有效。像這樣的申明inline tablefunction int i 是沒有效果的,編譯器只是把函式作為普通的函式申明,我們必須定義函式體。inline table...

什麼是類的成員函式和非成員函式

類有成員變數和成員函式。而函式中,不是任何一個類的成員的函式,就是非成員函式。例如 class a 這個就是成員函式。void f2 這個也是成員函式宣告,其實現在類的外部。void a f2 這個是成員函式的實現。void f3 這個就是非成員函式,它不屬於a,也不屬於任何一起其他的類。類的成員函...

c成員函式的行內函數能否在類外宣告

我想你把函式的定義和宣告兩個概念混淆了,可以定義在外面,但是宣告肯定是在類內啊。標頭檔案 class a 定義檔案 inline void a foo int x,int y 表明是一個行內函數 若是定義在類內,就是隱式內聯了,比如class a 可以,不過類內必須要有函式宣告 mfc自動生成的文件...