다음을 통해 공유


클래스 멤버 함수 및 클래스 친구 들으로

친구에서 다른 클래스와 클래스 멤버 함수를 선언할 수 있습니다.다음 예제를 참조하십시오.

// 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 의 private 멤버에 액세스할 수 없습니다 YourOtherClass.

관리 되는 형식의 모든 friend 함수, friend 클래스 또는 friend 인터페이스를 사용할 수 없습니다.

클래스에서 파생 된 의미 관계는 상속 되지 않습니다 YourOtherClass 에 액세스할 수 없습니다 YourClass의 전용 멤버입니다.우정 클래스는 친구의 하 여 전이 수 없습니다 YourOtherClass 액세스할 수 없습니다 YourClass의 전용 멤버입니다.

아래 그림 4 클래스 선언을 보여 줍니다. Base, Derived, aFriend, 및 anotherFriend.클래스는 aFriend 의 private 멤버에 직접 액세스할 Base (및 모든 멤버 Base 상속 될 수 있습니다).

친구 관계의 의미

Friend 관계 함축 그래픽

참고 항목

참조

friend (C++)