ㅏ 친구 수업 친구로 선언된 다른 클래스의 비공개 및 보호 멤버에 액세스할 수 있습니다. 특정 클래스가 다른 클래스의 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가 계속 중지됩니다.
친구 기능은 다음과 같습니다.
- 전역 함수
- 다른 클래스의 멤버 함수

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