(地基工)friend functions
Posted on 2011-03-02 15:57 點(diǎn)點(diǎn)滴滴 閱讀(219) 評(píng)論(0) 編輯 收藏 引用 所屬分類: 02 編程語言設(shè)有一個(gè)函數(shù) int f(const A &a) 含有一個(gè)引數(shù) a, 其為 class A 的一物件, 又 函數(shù) f 並不是 class A 的一個(gè) memeber function, 若於 函數(shù) f 的定義中, 欲能自由引用 class A 的 private elements 如同 class A 的 member function 一般, 則需要在 class A 中 宣告為一 friend function, (就好像得到 class A 的允許, 可以使用其 公用 與 私用 資料 ), 其 宣告方式如下:
class A
{
public:
A(int r=0){x=r;}
friend int f(const A &a);
private:
int x;
}
int f(const A &a)
{
return a.x*a.x;
}
說明:
{
public:
A(int r=0){x=r;}
friend int f(const A &a);
private:
int x;
}
int f(const A &a)
{
return a.x*a.x;
}
- 函數(shù)int f(const A &a) 的設(shè)計(jì), 可以在 class A 的定義之內(nèi),或在 class A 的定義之外, 如上述情況。
- 函數(shù)int f(const A &a) 並非是 class A 的一個(gè) member function, 因此, 於上述情況 函數(shù)int f(const A &a) 的定義並不加上 A:: 的標(biāo)示。
- 函數(shù)int f(const A &a) 於 class A 的宣告地方, 不限定在 public 或 private 區(qū)。
設(shè)有一個(gè)函數(shù) int h(const A &a, const B &b) 含有兩個(gè)引數(shù) a 與 b, 其分別為 class A 與 class B 的物件, 又函數(shù) h 既不是 class A 的 memeber function, 也不是 class B 的 memeber function。 若 函數(shù) h 欲能自由引用 class A 與 class B 的 private elements, 則需要在 class A 與 class B 中 宣告為一 friend function, 其 宣告方式如下例:
例 4: a friend function of 2 different classes。
說明:#include <iostream.h>
class B;
class A
{
public:
A(int r=0){x=r;}
~A(){}
friend int h(const A &a, const B &b);
private:
int x;
};
class B
{
public:
B(int r=0){y=r;}
~B(){}
friend int h(const A &a, const B &b);
private:
int y;
};
int h(const A &a, const B &b)
{
return a.x*b.y;
}
main()
{
A a(10);
B b(20);
cout<< "h() = "<< h(a, b)<< endl;
}
- 函數(shù)int h(const A &a, const B &b) 同時(shí)為 class A 與 class B 的 friend function。
- 該程式的執(zhí)行結(jié)果為 h() = 200


