[c++] 구조체와 클래스의 friend 클래스
구조체와 클래스의 friend 클래스
C++에서 구조체(struct)와 클래스(class)는 서로 다른 키워드지만 동일한 기능을 가집니다. 둘 다 멤버 변수와 함수를 포함할 수 있고, 인스턴스를 생성하여 사용할 수 있습니다. 하지만 둘 간에는 특정 차이점이 있습니다. 그 중 하나는 friend 클래스를 사용할 때의 차이입니다.
구조체(struct)의 friend 클래스
구조체에서도 friend 클래스를 선언할 수 있습니다. 이 경우에는 struct
키워드를 사용하여 멤버 함수를 friend로 선언합니다.
예제
#include <iostream>
struct MyStruct {
private:
int secretValue;
friend class FriendClass; // FriendClass를 friend로 선언
public:
MyStruct(int value) : secretValue(value) {}
};
class FriendClass {
public:
void AccessMyStruct(MyStruct &obj) {
std::cout << "The secret value in MyStruct is: " << obj.secretValue << std::endl;
}
};
int main() {
MyStruct obj(5);
FriendClass f;
f.AccessMyStruct(obj); // FriendClass가 MyStruct의 private 멤버에 접근
return 0;
}
클래스(class)의 friend 클래스
클래스에서는 friend 클래스를 선언할 때 class
키워드를 사용합니다.
예제
#include <iostream>
class MyClass {
private:
int privateValue;
friend class FriendClass; // FriendClass를 friend로 선언
public:
MyClass(int value) : privateValue(value) {}
};
class FriendClass {
public:
void AccessMyClass(MyClass &obj) {
std::cout << "The private value in MyClass is: " << obj.privateValue << std::endl;
}
};
int main() {
MyClass obj(10);
FriendClass f;
f.AccessMyClass(obj); // FriendClass가 MyClass의 private 멤버에 접근
return 0;
}
결론
구조체와 클래스 모두 friend 클래스를 사용하여 다른 클래스나 구조체의 private 멤버에 접근할 수 있습니다. 구조체와 클래스의 friend 클래스를 선언하는 방법은 유사하지만, 구조체의 경우 struct
키워드를, 클래스의 경우 class
키워드를 사용해야 합니다.
참고 문헌:
- https://www.geeksforgeeks.org/friend-class-function-cpp/