logo

C++의 Friend 클래스 및 함수

친구 수업 친구로 선언된 다른 클래스의 비공개 및 보호 멤버에 액세스할 수 있습니다. 특정 클래스가 다른 클래스의 private 및 protected 멤버에 액세스할 수 있도록 허용하는 것이 유용한 경우가 있습니다. 예를 들어 LinkedList 클래스는 Node.js의 비공개 멤버에 액세스하도록 허용될 수 있습니다.

다음을 사용하여 C++에서 친구 클래스를 선언할 수 있습니다. 친구 예어.



통사론:

friend class class_name; // declared in the base class>

친구 수업


예:



C++
// C++ Program to demonstrate the // functioning of a friend class #include  using namespace std; class GFG { private:  int private_variable; protected:  int protected_variable; public:  GFG()  {  private_variable = 10;  protected_variable = 99;  }  // friend class declaration  friend class F; }; // Here, class F is declared as a // friend inside class GFG. Therefore, // F is a friend of class GFG. Class F // can access the private members of // class GFG. class F { public:  void display(GFG& t)  {  cout << 'The value of Private Variable = '  << t.private_variable << endl;  cout << 'The value of Protected Variable = '  << t.protected_variable;  } }; // Driver code int main() {  GFG g;  F fri;  fri.display(g);  return 0; }>

산출
The value of Private Variable = 10 The value of Protected Variable = 99>

메모: 개인 블록, 보호 블록, 공개 블록 등 기본 클래스 본문 어디에서나 친구 클래스나 함수를 선언할 수 있습니다. 그것은 모두 동일하게 작동합니다.

친구 기능

friend 클래스와 마찬가지로 friend 함수에도 C++ 클래스의 private 및 protected 멤버에 대한 특별한 액세스 권한을 부여할 수 있습니다. 이들은 클래스의 멤버 함수는 아니지만 친구로 선언되어 있으므로 해당 클래스의 private 및 protected 멤버에 액세스하고 조작할 수 있습니다.

안드로이드 프로세스 acore가 계속 중지됩니다.

친구 기능은 다음과 같습니다.



  1. 전역 함수
  2. 다른 클래스의 멤버 함수
C++의 Friend 함수(예제 포함)

C++의 친구 함수

통사론:

friend return_type function_name (arguments); // for a global function  or friend return_type class_name::function_name (arguments); // for a member function of another class>
친구 함수 구문

Friend 함수 구문

1. 친구 기능으로서의 글로벌 기능

어떤 전역 함수라도 친구 함수로 선언할 수 있습니다. 다음 예제에서는 C++에서 전역 함수를 friend 함수로 선언하는 방법을 보여줍니다.

예:

C++
// C++ program to create a global function as a friend // function of some class #include  using namespace std; class base { private:  int private_variable; protected:  int protected_variable; public:  base()  {  private_variable = 10;  protected_variable = 99;  }    // friend function declaration  friend void friendFunction(base& obj); }; // friend function definition void friendFunction(base& obj) {  cout << 'Private Variable: ' << obj.private_variable  << endl;  cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() {  base object1;  friendFunction(object1);  return 0; }>

산출
Private Variable: 10 Protected Variable: 99>

위의 예에서는 전역 함수를 친구 함수로 사용했습니다. 다음 예제에서는 다른 클래스의 멤버 함수를 친구 함수로 사용하겠습니다.

2. 다른 클래스의 멤버 함수를 Friend 함수로

C++에서는 다른 클래스의 멤버 함수를 친구 함수로 선언할 수도 있습니다. 다음 예제에서는 C++에서 다른 클래스의 멤버 함수를 친구 함수로 사용하는 방법을 보여줍니다.

예:

C++
// C++ program to create a member function of another class // as a friend function #include  using namespace std; class base; // forward definition needed // another class in which function is declared class anotherClass { public:  void memberFunction(base& obj); }; // base class for which friend is declared class base { private:  int private_variable; protected:  int protected_variable; public:  base()  {  private_variable = 10;  protected_variable = 99;  }  // friend function declaration  friend void anotherClass::memberFunction(base&); }; // friend function definition void anotherClass::memberFunction(base& obj) {  cout << 'Private Variable: ' << obj.private_variable  << endl;  cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() {  base object1;  anotherClass object2;  object2.memberFunction(object1);  return 0; }>

산출
Private Variable: 10 Protected Variable: 99>

메모 : 다른 클래스의 친구 기능을 정의하는 순서는 중요하므로 주의해야 합니다. 우리는 항상 함수 정의 전에 두 클래스를 모두 정의해야 합니다. 이것이 우리가 클래스 멤버 함수 정의를 사용한 이유입니다.

친구 기능의 특징

  • 프렌드 함수는 클래스의 멤버 함수가 아님에도 불구하고 다음과 같은 권한을 갖는 C++의 특수 함수입니다. 입장 그만큼 개인 및 보호 데이터 수업의.
  • 친구 함수는 멤버가 아닌 함수 또는 클래스의 일반 함수로, 키워드를 사용하여 친구로 선언됩니다. 친구 수업 내부. 함수를 친구로 선언하면 해당 함수에 모든 접근 권한이 부여됩니다.
  • 친구 키워드는 친구 함수의 함수 선언에만 배치되며 ~ 아니다 에서 함수 정의 또는 호출.
  • 친구 함수는 일반 함수처럼 호출됩니다. 객체 이름과 점 연산자를 사용하여 호출할 수 없습니다. 그러나 객체를 값에 액세스하려는 인수로 받아들일 수 있습니다.
  • friend 함수는 클래스의 모든 섹션(예: public, private 또는 protected)에서 선언될 수 있습니다.

다음은 다양한 시나리오의 친구 기능에 대한 몇 가지 추가 예입니다.

여러 클래스에 친화적인 함수

C++
// C++ Program to demonstrate  // how friend functions work as // a bridge between the classes #include  using namespace std; // Forward declaration class ABC;  class XYZ {  int x; public:  void set_data(int a)   {   x = a;   }  friend void max(XYZ, ABC); }; class ABC {  int y; public:  void set_data(int a)   {   y = a;   }  friend void max(XYZ, ABC); }; void max(XYZ t1, ABC t2) {  if (t1.x>t2.y) cout<< t1.x;  else  cout << t2.y; } // Driver code int main() {  ABC _abc;  XYZ _xyz;  _xyz.set_data(20);  _abc.set_data(35);  // calling friend function  max(_xyz, _abc);   return 0; }>

산출
35>

친구 기능은 개인 데이터에 접근할 수 있는 방법을 제공하지만 단점도 있습니다. 다음은 C++의 friend 함수의 장점과 단점 목록입니다.

친구 기능의 장점

  • friend 함수는 클래스를 상속받지 않고도 멤버에 액세스할 수 있습니다.
  • friend 함수는 개인 데이터에 액세스하여 두 클래스 사이를 연결하는 역할을 합니다.
  • 이는 과부하된 연산자의 다양성을 높이는 데 사용할 수 있습니다.
  • 클래스의 public, private 또는 protected 부분에서 선언할 수 있습니다.

친구 기능의 단점

  • Friend 함수는 데이터 숨김의 법칙을 위반하는 클래스 외부에서 클래스의 비공개 멤버에 액세스할 수 있습니다.
  • Friend 함수는 멤버에서 런타임 다형성을 수행할 수 없습니다.

Friend 함수 및 클래스에 대한 중요한 사항

  1. 친구는 제한된 목적으로만 사용해야 합니다. 너무 많은 함수나 외부 클래스가 보호되거나 개인 데이터에 액세스하는 클래스의 친구로 선언되면 객체 지향 프로그래밍에서 별도의 클래스를 캡슐화하는 가치가 줄어듭니다.
  2. 우정은 상호적이지 않음 . 클래스 A가 B의 친구라면 B는 자동으로 A의 친구가 되지 않습니다.
  3. 우정은 유전되지 않습니다. (보다 이것 상세 사항은)
  4. 친구라는 개념은 Java에 없습니다.