共用方式為


類別成員函式,並為 Friends 的類別

類別成員函式可以宣告為其他類別中的朋友。 參考下列範例:

// classes_as_friends1.cpp
// compile with: /c
class B;

class A {
public:
   int Func1( B& b );

private:
   int Func2( B& b );
};

class B {
private:
   int _b;

   // A::Func1 is a friend function to class B
   // so A::Func1 has access to all members of B
   friend int A::Func1( B& );
};

int A::Func1( B& b ) { return b._b; }   // OK
int A::Func2( B& b ) { return b._b; }   // C2248

在上述範例中,此函式A::Func1( B& )被授與 friend 存取類別B。 因此可存取私用成員_b是在正確的Func1 類別的A ,但是Func2。

A friend類別是所有的成員函式都是類別的 friend 函式類別,也就是其成員函式能夠存取另一個類別的私用和受保護的成員。 假設friend類別中的宣告B假設是:

friend class A;

在此情況中,在類別中的所有成員函式A會被授與 friend 存取類別B。 下列程式碼是 friend 類別的範例:

// classes_as_friends2.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class YourClass {
friend class YourOtherClass;  // Declare a friend class
public:
   YourClass() : topSecret(0){}
   void printMember() { cout << topSecret << endl; }
private:
   int topSecret;
};

class YourOtherClass {
public:
   void change( YourClass& yc, int x ){yc.topSecret = x;}
};

int main() {
   YourClass yc1;
   YourOtherClass yoc1;
   yc1.printMember();
   yoc1.change( yc1, 5 );
   yc1.printMember();
}

無法相互,除非您明確指定為可友誼。 在上述範例中,成員函式的YourClass無法存取私用成員的YourOtherClass。

Managed 型別不能有任何的 friend 函式、 friend 類別或朋友的介面。

友誼不會繼承,這表示類別衍生自YourOtherClass無法存取YourClass的私用成員。 友誼不是可轉移的因此類別,為朋友的YourOtherClass無法存取YourClass的私用成員。

下圖顯示四個類別宣告: Base, Derived, aFriend,以及anotherFriend。 只有類別aFriend的私用成員的直接存取Base (和其任何成員Base接手)。

朋友的關聯性的含意

Friend 關聯性含意圖形

請參閱

參考

friend (C++)