Friend 함수를 사용하면 함수가 다른 클래스의 비공개 멤버에 액세스할 수 있습니다. 친구 함수와 이 함수가 액세스하는 클래스가 동일한 컴파일 단위에 있지 않은 경우 두 가지 시나리오가 있습니다. 친구 함수는 헤더 파일에 선언됩니다. 친구 함수의 선언은 클래스의 헤더 파일에 있고 정의는 클래스가 다른 소스 파일에 있으면 친구 함수가 비공개 멤버에 액세스할 수 있습니다. 프렌드 함수는 소스 파일에 선언됩니다. 프렌드 함수의 선언과 정의는 별도의 소스 파일에 위치합니다. 프렌드 함수는 다른 컴파일 단위에서 사용되기 전에 헤더 파일에 선언되어야 합니다.
C++ 친구 함수에 대한 자세한 설명: 다양한 컴파일 단위에서 친구 함수 사용
친구 함수는 다른 클래스의 비공개 멤버에 액세스할 수 있는 C++의 특별한 유형의 함수입니다. 이를 통해 친구 함수는 개인 데이터 수정이나 개인 메서드 호출 등 다른 클래스가 할 수 없는 작업을 수행할 수 있습니다.
다른 컴파일 단위의 친구 함수
코드를 다른 컴파일 단위(예: 소스 파일 또는 헤더 파일)로 구성하면 친구 함수 사용이 더 복잡해집니다. 친구 함수가 다른 클래스의 전용 멤버에 액세스할 수 있으려면 친구 함수가 선언되기 전에 클래스를 선언해야 합니다.
friend 함수와 액세스하는 클래스가 동일한 컴파일 단위에 없으면 두 가지 시나리오가 있습니다.
시나리오 1: friend 함수가 헤더 파일에 선언됩니다.
이 경우, 친구 함수 선언은 클래스의 헤더 파일에 있고 클래스 정의는 다른 소스 파일에 있습니다. 가장 일반적인 경우는 다음과 같습니다.
// header.h class MyClass { // ... friend void myFriendFunction(); }; // source.cpp #include "header.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
시나리오 2: 소스 파일에 선언된 Friend 함수
이 덜 일반적인 경우에서는 friend 함수의 선언과 정의가 모두 별도의 소스 파일에 있습니다.
// class.cpp class MyClass { // ... friend void myFriendFunction(); }; // friend.cpp #include "class.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
시나리오 2의 경우 , 다른 컴파일 단위에서 사용하려면 헤더 파일에서 friend 함수를 선언해야 합니다.
// header.h class MyClass; // 前向声明 extern void myFriendFunction();
실용 사례
friend 함수를 사용하여 개인 멤버를 작동하는 다음 예를 고려하세요.
#include <iostream> class MyClass { int privateMember; public: MyClass(int val) : privateMember(val) {} friend void printPrivate(MyClass& obj); }; void printPrivate(MyClass& obj) { std::cout << "Private member: " << obj.privateMember << std::endl; } int main() { MyClass obj(10); printPrivate(obj); // 可以访问 privateMember return 0; }
이 예에서는 , printPrivate()
友元函数可以访问 MyClass
的私有成员 privateMember
를 입력하고 콘솔에 인쇄합니다.
Notes
위 내용은 C++ 친구 함수에 대한 자세한 설명: 다른 컴파일 단위에서 친구 함수는 어떻게 사용됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!