기능 또는 클래스에 의해 사용되는지 여부에 관계없이 친구 기능 은 객체 지향 패러다임에 대한 캡슐화 를 약화 시킴에 따라 객체 지향 프레임 워크에 부정적인 영향을 줄 수 있습니다. 친구 기능을 현명하게 사용해야하는 이유는 코드의 데이터 숨김 을 깨뜨릴 수 있기 때문입니다.
이 친구의 특징은 교환 적이 거나 전이 적이 지 않습니다. X는 Y의 친구이기 때문에 Y는 X의 친구이기도합니다. X가 Y의 친구이고 Y가 Z의 친구 인 경우 X가 Z의 친구라는 것을 의미하지 않습니다.
비교 차트
비교 근거 | 친구 기능 | 친구 클래스 |
---|---|---|
기본 | 이것은 비 멤버 함수에 클래스의 private 멤버에 대한 액세스 권한을 부여하는 friend 키워드와 함께 사용되는 함수입니다. | 이 클래스는 다른 클래스의 비공개 멤버에 액세스하기 위해 friend 키워드와 함께 사용되는 클래스입니다. |
전달 선언 | 반드시 사용해야합니다. | 의무가 아닌. |
용도 | 오퍼레이터 오버로딩의 일부 상황에서 친구 기능을 사용할 수 있습니다. | 친구 클래스는 다른 클래스의 맨 위에 클래스가 생성 될 때 사용할 수 있습니다. |
친구 기능의 정의
friend 함수 는 비 멤버 함수에 액세스 권한을 허용하여 클래스의 비공개 및 보호 된 멤버에 액세스하는 데 사용됩니다. 이 유형의 함수에서는 friend 키워드가 선언시 함수 이름 앞에 사용됩니다. 친구 기능에는 몇 가지 제한 조건이 적용됩니다. 첫 번째 조건은 friend 클래스가 자식 클래스에 상속되지 않는다는 것입니다. 두 번째 조건은 저장소 클래스 지정자가 friend 함수에 없을 수 있다는 것입니다. 즉, 정적 및 외부로 선언 할 수 없습니다.
friend 함수는 클래스의 호출 객체와 함께 호출되지 않습니다. friend 함수의 예는 다음과 같습니다. 전역 함수, 클래스의 멤버 함수, 함수 템플릿은 friend 함수가 될 수 있습니다. 예제를 통해 이해해 봅시다.
#include using namespace std; 클래스 first {int data; public : first (int i) : data (i) {} friend void display (const first & a); }; void 디스플레이 (const first & a) {cout << "data ="<친구 클래스의 정의
friend 함수와 마찬가지로 하나의 클래스를 friend 클래스 라고하는 다른 클래스의 친구로 만들 수 있습니다. friend 클래스가 다른 클래스에 정의 된 private 멤버에 액세스 할 수 있도록합니다. 친구 클래스는 다른 클래스를 상속하는 대신 다른 클래스에 정의 된 이름에만 액세스 할 수 있다는 것을 기억해야합니다. 정확히 말하면, 1 등석의 멤버는 친구 클래스의 멤버가 될 수 없습니다. 이러한 친구 클래스는 거의 사용되지 않습니다.
friend 클래스는 하나 이상의 클래스로 선언 될 수 있습니다. 이 기능을 사용하면 여러 친구 기능을 만드는 대신 전체 데이터 멤버와 기능에 액세스 할 수있는 친구 클래스를 만들 수 있기 때문에 친구 기능에 대한 간단한 대체 방법으로 간주됩니다.
#include using namespace std; class First {// 친구 클래스 친구 클래스 선언하기 둘째; public : First () : a (0) {} void print () {cout << "결과는"<< a << endl; } private : int a; }; class Second {public : void change (First & yclass, int x) {yclass.a = x; }}; int main () // 출력 결과는 0입니다. 결과는 5입니다.Friend 기능과 Friend 클래스의 주요 차이점
- 프렌드 함수는 클래스의 개인 및 보호 된 멤버에 액세스 할 수있는 함수입니다. 반대로, friend 클래스는 클래스의 private 멤버에 액세스하는 데 도움이되는 클래스입니다.
- 친구 함수는 클래스 안에 프로토 타입을 포함 시켜서 선언하고, 친구 friend라는 키워드로 시작한다. 마찬가지로 friend 클래스는 keyword friend를 사용하여 정의됩니다.
- forward 선언문은 friend 함수의 경우에 사용되며 friend 클래스에서는 사용할 필요가 없습니다.
결론
친구 함수는 두 개 이상의 독립적 인 클래스 인 내부 멤버에 함수가 액세스해야 할 때 필요합니다. 반면에 클래스가 다른 클래스의 멤버에 액세스해야하는 경우 friend 클래스가 필요합니다. 다중 멤버 함수가 그 함수의 친구 일 필요가있는 경우, 이 경우 friend 클래스를 사용하는 것이 낫습니다.