友元函式問題,友元函式有什麼作用,它主要用在哪些情況下

時間 2025-01-12 07:15:18

1樓:網友

這是的固有bug,必須提前宣告才行:

#include

using namespace std;

class lab; /加了這兩行。

lab operator + lab & a1,lab & a2);

class lab

public:

show();

lab(int a=0); 注意這裡。

friend lab operator + lab & a1,lab & a2);

private:

int num;

lab::lab(int a)

num=a;}

lab::show()

coutreturn a;

main()

lab a1(1);

lab a2(2);

lab a3(0);

a3=a1+a2;

return 0;

其它錯誤順便幫你改了,請參考。

2樓:網友

先宣告lab operator + lab & a1,lab & a2);class lab還不知道誰是operator +

友元函式有什麼作用,它主要用在哪些情況下?

3樓:我愛的

友元函式的作用就是提供直接訪問物件的私有成員的介面。通過友元,乙個不同函式或另乙個類中的成員函式可以訪問類中的私有成員和保護成員。

使用情況:1)必須在類的說明中說明友元函式,說明時以關鍵字friend開頭,後跟友元函式的函式原型,友元函式的說明可以出現在類的任何地方,包括在private和public部分;

2)注意友元函式不是類的成員函式,所以友元函式的實現和普通函式一樣,在實現時不用"::"指示屬於哪個類,只有成員函式才使用"::"作用域符號;

3)友元函式不能直接訪問類的成員,只能訪問物件成員;

4)友元函式可以訪問物件的私有成員,但普通函式不行;

5)呼叫友元函式時,在實際引數中需要指出要訪問的物件;

6)類與類之間的友元關係不能繼承;

7)乙個類的成員函式也可以作為另乙個類的友元,但必須先定義這個類。

4樓:

友元函式。

友元函式的特點是能夠訪問類中的私有成員的非成員函式。友元函式從語法上看,它與普通函式一樣,即在定義上和呼叫上與普通函式一樣。下面舉一例子說明友元函式的應用。

class point

void getxy();

private:

double x, y;

void point::getxy()void main()

說明:在該程式中的point類中說明了乙個友元函式distance(),它在說明時前邊加friend關鍵字,標識它不是成員函式,而是友元函式。它的定義方法與普通函式定義一樣,而不同於成員函式的定義,因為它不需要指出所屬的類。

但是,它可以引用類中的私有成員,函式體中 ,,都是類的私有成員,它們是通過物件引用的。在呼叫友元函式時,也是同普通函式的呼叫一樣,不要像成員函式那樣呼叫。

5樓:那_西蒙

友元是為了解決執行效率和封裝性而設立的概念。

設想乙個問題:輸入兩個(x,y)座標,輸出兩點間距離。(用物件導向方法編寫程式)

首先建立類point。

class point //建構函式。

然後,我們要計算兩點間的距離。

把這個函式叫distance(,)引數是point類的兩個物件;distance()要計算距離,就必須訪問物件裡的私有變數x,y。如下:

distance(point &a, point &b)

這個函式可能是三種情況之一:獨立於類point的全域性函式,類point的成員函式,類point的友元函式。1)非類point成員函式首先被排除,因為distance(,)需要訪問類point物件的private變數,這是不允許的。

2)類point的成員函式,理論上被允許,但呼叫distace(,)則必須通過物件,增加了程式的複雜度,許多成員需要被反覆呼叫。

3)友元函式應運而生,加上friend,它可以訪問類內的private變數,而呼叫時不必增加而外開銷。

完整程式:#include

#include

using namespace std;

class point //建構函式。

void getxy();//獲取輸入的(x,y)座標並顯示。

友元函式distance(,)用於計算兩點間距離。

void point::getxy()

當然,另外的方法是友元類;把distance(,)放在這個友元類裡。這個問題友元函式就可以解決了,較大的系統裡可以使用友元類,涉及設計模式時比較常用的方法。

關於友元函式

6樓:陳學陽

從字面上我們可以這樣理解,就象繼承一樣,可以說子繼承父,友元就是朋友,它不是類的組成部分,因此被稱為直接函式呼叫。友元函式不能隱式訪問類成員,而必須將成員操作符用於作為引數傳遞的物件。

友元函式要在乙個類體內說明,形式為:

friend 型別名 友元函式名(形參表);

然後在類體外對友元函式進行定義,定義的格式和普通函式相同,但可以通過物件作為引數直接訪問物件的私有成員。

友元函式說明如下:

1)必須在類的說明中說明友元函式,說明時以關鍵字friend開頭,後跟友元函式的函式原型,友元函式的說明可以出現在類的任何地方,包括在private和public部分;

2)注意友元函式不是類的成員函式,所以友元函式的實現和普通函式一樣,在實現時不用"::"指示屬於哪個類,只有成員函式才使用"::"作用域符號;

3)友元函式不能直接訪問類的成員,只能訪問物件成員,4)友元函式可以訪問物件的私有成員,但普通函式不行;

5)呼叫友元函式時,在實際引數中需要指出要訪問的物件!

如果對您有幫助,請記得采納為滿意答案,謝謝!祝您生活愉快!

7樓:豬頭或火寶寶

你好!!!

有元函式和普通的函式一樣的,都是直接呼叫的,void increment(myclass& f) 這是函式的定義,increment(obj);這是函式的呼叫!!

8樓:網友

因為友元函式可以直接修改類裡面的所有資料。

友元函式的介紹

9樓:私起

友元函式是指某些雖然不是納梁類成員卻能夠訪問或州類的所有成員的函式。類授予它的友元特別洞團運的訪問權。通常同乙個開發者會出於技術和非技術的原因,控制類的友元和成員函式(否則當你想更新你的類時,還要徵得其它部分的擁有者的同意)。

友元類的使用

10樓:度度

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

friend class 類名(即友元類的類名);

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

求助一道關於陣列類及友元函式的C 程式設計題

include using namespace std class array array array int n void foreach 將陣列輸出 return a1 int main 滿足你的主要要求,樓主可以自己再豐富優化下,大概思路就是這樣了。求助一道關於字串類過載的c 程式設計題! 自...

土元有什麼作用?土元的功效與作用

土元,即是土鱉。地鱉別名 地鱉蟲 土鱉 過街 地烏龜 節節蟲 臭蟲母 土元。屬於昆蟲,身體扁,棕黑色,雄的有翅膀,雌的無翅。常在住宅牆根的土內活動。可入。也叫蜇蟲,通稱土鱉。鱉蠊科昆蟲地鱉 或冀地鱉的雌蟲乾燥體。捕捉後,置沸水中燙死,曬乾或烘乾。地鱉 土元 地鱉蟲 性味與歸經 鹹,寒 有小毒。歸肝經...

c 中什麼是虛函式?空虛函式有什麼作用?可以宣告抽象類的對

簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進行分離 用形象的語言來解釋就是實現以共同的方法,但因個體差異而採用不同的策略。下面來看一段簡單的 class a 執行一下看看結果,喲呵,驀然...