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開始,它只能出現在類定義的內部,友...