클래스의 friend 함수는 해당 클래스의 범위 외부에 정의되어 있지만 클래스의 모든 private 및 protected 멤버에 액세스할 수 있는 권한이 있습니다. 친구 함수의 프로토타입이 클래스 정의에 나타나더라도 친구는 멤버 함수가 아닙니다.
친구는 함수, 함수 템플릿, 멤버 함수 또는 클래스나 클래스 템플릿이 될 수 있으며, 이 경우 전체 클래스와 모든 멤버가 친구입니다.
함수를 클래스의 friend로 선언하려면 다음과 같이 friend 키워드를 클래스 정의에서 함수 프로토타입 앞에 둡니다. -
class Box {
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
}; ClassTwo 클래스의 모든 멤버 함수를 ClassOne 클래스의 친구로 선언하려면 ClassOne 정의에 다음 선언을 배치하십시오. -
friend class ClassTwo;
예
#include <iostream>
using namespace std;
class Box {
double width;
public:
friend void printWidth( Box box );
void setWidth( double wid );
};
// Member function definition
void Box::setWidth( double wid ) {
width = wid;
}
// Note: printWidth() is not a member function of any class.
void printWidth( Box box ) {
/* Because printWidth() is a friend of Box, it can
directly access any member of this class */
cout << "Width of box : " << box.width <<endl;
}
// Main function for the program
int main() {
Box box;
// set box width without member function
box.setWidth(10.0);
// Use friend function to print the wdith.
printWidth( box );
return 0;
} 출력
이것은 출력을 제공합니다 -
Width of box: 10
함수가 클래스의 멤버가 아니더라도 해당 클래스의 멤버 변수에 직접 액세스할 수 있습니다. 이것은 특정 상황에서 매우 유용할 수 있습니다.