c 友元函式

2021-07-13 15:12:19 字數 1965 閱讀 8837

c++中以關鍵字friend宣告

友元關係。友元可以訪問與其有friend關係的類中的私有成員。友元包括友元函式和友元類。 編輯

如果在本類以外的其它地方定義了乙個函式(這個函式可以是不屬於任何類的非成員函式,也可以是其它類的成員函式),在類體中用friend對該函式進行宣告,此函式就稱為本類的

友元函式。乙個類的友元函式可以訪問這個類中的private成員。

如果要將乙個全域性函式(call)宣告為本類(time)的

友元函式,則只需要在本類的函式宣告部分宣告該函式為friend。此時,該函式可以訪問本類的private成員。

class time;

time::time(int h,int m,int s)

void call(time &t)

int main()

如果需要將目標類(time)中的成員函式(call)宣告為本類(date)的

友元函式,則需要在本類的函式宣告部分宣告該函式為friend。此時,該函式可以訪問本類的private成員。

class date; //對date類的提前引用宣告

class time;

class date;

time::time(int h,int m,int s)

void time::call(date &d)

date::date(int m,int d,int y)

int main()

這裡還做了對類的提前引用宣告。

一般情況下,類必須先宣告(給出類體),才能使用。如果需要在類宣告之前,使用該類的名字去定義指向該類物件的

指標或引用,可以使用提前引用宣告。如上例所示,

class date; //對date類的提前引用宣告

void call(date &);//date類的引用

class date//date類的宣告

但不能因為提前引用宣告,而去定義乙個類的物件,這是不允許的。

class date;

//緊接著馬上定義乙個date類的物件

date d1;error:aggregate `date d1' has incomplete type and cannot be defined

class date

在定義物件時要為這些物件分配儲存空間,在正式宣告類之前,

編譯系統無法確定應為物件分配多大的儲存空 間。編譯系統只有見到「類體」之後才能確定應該為物件預留多大的空間。所以不能在宣告類之前,先定義乙個該類的物件。但是可以在宣告類之前,先使用該類的 名字定義乙個該類的

指標或引用。因為

指標變數和引用本身的大小是固定的,它與指向的類物件的大小無關。

在這種情況下,該函式可以同時訪問多個類的private成員。

class date; //對date類的提前引用宣告

class time;

class date;

time::time(int h,int m,int s)

date::date(int m,int d,int y)

void call(time &t,date &d)

int main()

編輯可以將乙個類(b)宣告為當前類(a)的友元。此時,當前類(a)的友元類(b)中的所有成員函式都是當前類的

友元函式,可以訪問當前類的private成員。

class date; //對date類的提前引用宣告

class time;

class date;

time::time(int h,int m,int s)

date::date(int m,int d,int y)

void date::call_hour(time &t)

void date::call_min(time &t)

void date::call_sec(time &t)

int main()

C 友元函式 友元類 友元成員函式

眾所周知,c 控制對類物件私有部分的訪問。通常,公有類方法提供唯一的訪問途徑,但是有時候這種限制太嚴格,以至於不適合特定的程式設計問題。在這種情況下,c 提供了另外一種形式的訪問許可權 友元,友元有3種 友元函式 友元類 友元成員函式。通過讓函式成為類的友元 即 友元函式 可以賦予該函式與類的成員函...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...