friend functions c
예제를 통해 C ++의 Friend 함수에 대해 자세히 알아보십시오.
C ++는 데이터가 단일 단위를 형성하기 위해 작동하는 함수와 함께 번들로 제공되는 캡슐화 기능을 지원합니다. 이렇게하면 C ++에서 데이터가 작동하는 함수에 의해서만 액세스되고 클래스 외부의 누구에게도 액세스 할 수 없게됩니다.
이는 데이터를 보존하고 외부로 유출되는 것을 방지하는 C ++의 차별화 된 기능 중 하나입니다.
그러나 일부 실시간 응용 프로그램에서는 때때로 번들 장치 외부의 데이터에 액세스하려고 할 수 있습니다. 예를 들어 외부인 클래스는 C ++ 클래스의 개인 및 보호 데이터에 액세스하려고 할 수 있습니다.
bin 파일을 여는 방법
C ++는 '친구'함수 또는 클래스라는 특수 기능을 통해 개인 및 보호 된 데이터에 액세스하는 기능을 제공합니다.이 기능은이 자습서에서 설명합니다.
학습 내용 :
C ++의 친구 함수
C ++의 친구 함수는 '친구'키워드가 앞에 오는 함수입니다. 함수가 친구로 선언되면 클래스의 개인 및 보호 데이터 멤버에 액세스 할 수 있습니다.
friend 함수는 아래와 같이 앞에 friend 키워드가있는 클래스 내부에서 선언됩니다.
class className{ …… friend returnType functionName(arg list); };
위와 같이 friend 함수는 개인 및 보호 데이터 멤버에 액세스 할 클래스 내에서 선언됩니다. 함수는 코드 파일의 어느 곳에서나 정의 할 수 있으며 friend 키워드 나 범위 확인 연산자를 사용할 필요가 없습니다.
프로그램에서 친구 기능을 구현할 때 기억해야 할 몇 가지 사항이 있습니다.
- friend 함수는 클래스의 private 또는 public 섹션에서 선언 할 수 있습니다.
- 객체를 사용하지 않고 일반 함수처럼 호출 할 수 있습니다.
- 친구 함수는 친구 인 클래스 범위에 포함되지 않습니다.
- friend 함수는 클래스 범위에 있지 않으므로 클래스 개체를 사용하여 호출되지 않습니다.
- friend 함수는 클래스의 개인 및 보호 데이터 멤버에 직접 액세스 할 수 없습니다. 클래스 개체를 사용한 다음 도트 연산자를 사용하여 멤버에 액세스해야합니다.
- friend 함수는 전역 함수이거나 다른 클래스의 멤버 일 수 있습니다.
친구 함수의 예
Friend Function의 사용법을 더 잘 이해하기 위해 프로그래밍 예제를 구현해 보겠습니다.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< 산출:
면적 = 150
위의 프로그램에는 개인 멤버 길이와 너비가있는 클래스 샘플이 있습니다. 길이와 너비 값을 초기화하는 공용 생성자가 있습니다. 다음으로 길이와 너비를 고려하여 면적을 계산하는 동반자 함수 'calcArea'가 있습니다.
calcArea는 친구 함수이며 클래스의 일부가 아닙니다. main 함수에서는 클래스 샘플의 객체를 생성 한 후 면적을 계산하고 값을 표시하는 calcArea 함수에 전달합니다.
친구 클래스
친구 기능과 마찬가지로 친구 클래스도 가질 수 있습니다. 친구 클래스는 자신이 친구 인 클래스의 개인 및 보호 멤버에 액세스 할 수 있습니다.
class A{ …… friend class B; }; class B{ …….. };
위에서 설명한 것처럼 B 등급은 A 등급의 친구입니다. 따라서 B 등급은 A 등급의 개인 및 보호 멤버에 액세스 할 수 있습니다.
그러나 이것은 클래스 A가 클래스 B의 개인 및 보호 멤버에 액세스 할 수 있다는 것을 의미하지 않습니다. 우리가 그렇게하지 않는 한 우정은 상호가 아닙니다.
마찬가지로 클래스의 우정은 상속되지 않습니다. 즉, 클래스 B는 클래스 A의 친구이므로 클래스 A의 하위 클래스의 친구가 아닙니다.
친구 클래스를 보여주는 프로그래밍 예제를 살펴 보겠습니다.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< 산출:
면적 = 150
이 프로그램에는 두 개의 클래스가 있습니다. 길이 및 너비 매개 변수를 사용하여 면적을 계산하는 클래스 '면적'. 필드, 면적, 길이 및 너비는 모두 Area 클래스의 개인 멤버입니다.
다음으로 사용되는 클래스는 Area 클래스의 calcArea 함수로 계산 된 영역을 인쇄하는 'printClass'입니다. 멤버가 비공개이므로 printClass를 Area 클래스의 친구로 만들어야합니다.
이 작업이 완료되면 메인 함수에서 Area 클래스의 객체를 생성하고 면적을 계산 한 다음 해당 객체를 printClass 클래스의 printArea 함수에 전달하여 영역을 표시합니다.
친구 기능의 장점 / 단점
friend 함수 또는 클래스의 한 가지 장점은 클래스의 개인 및 보호 데이터에 액세스 할 수 있다는 것입니다. 예를 들어, 연결 목록을 구현하는 경우 연결 목록 클래스를 노드 클래스의 친구로 만들고 연결 목록이 노드로 구성되어 있으므로 해당 데이터에 액세스 할 수 있습니다.
따라서 특정 상황에서 친구 기능이나 클래스를 사용하는 것이 유리할 수 있습니다. 그러나 몇 가지 단점도 있습니다.
C ++의 차별화 된 기능 중 하나는 캡슐화입니다. 즉, 외부 함수 나 클래스가 데이터에 액세스 할 수 없도록 해당 데이터에서 작동하는 데이터와 함수를 함께 묶는 것입니다. 그러나 친구 함수 나 클래스가 다른 클래스의 개인 멤버에 액세스하도록 허용함으로써 실제로 캡슐화 기능이 손상됩니다.
QA 분석가 인터뷰 질문 및 답변
이를 방지하기 위해서는 친구 함수 나 클래스 사용에주의해야합니다. 캡슐화를 완전히 타협하는 프로그램에서 너무 많은 friend 함수와 클래스를 사용하지 않도록해야합니다.
결론
이것으로 C ++의 친구 함수 및 클래스에 대한 자습서를 마칩니다.
독자는 친구 클래스와 함수를 사용하는 동안 프로그래머에게 도움이 될 수있는 것처럼 매우 조심해야합니다. 또한 친구 함수와 클래스를 과도하게 사용하면 프로그램에서 캡슐화의 OOP 기능이 손상 될 수 있으므로주의해서 사용해야합니다.
다음 자습서에서는 C ++의 정적 함수에 대해 자세히 알아 봅니다.
=> 처음부터 C ++를 배우려면 여기를 방문하십시오.
추천 도서