반응형
[C++] 클래스 private접근, Friend 지정 사용
클래스의 멤버 중 private로 지정된 것들은 자신만 접근할 수 있게 설계되었는데 예외는 있다.
Friend 키워드이다.
내 소중한 물건을 친구에게 빌려줄 수 있듯이 클래스에서 친구로 지정한 것들은 접근이 가능하다.
전역 함수, 클래스, 멤버 함수를 Friend로 지정 가능하다.
그 세 가지 예시를 하나의 코드에 담았다.
#include <iostream>
using namespace std;
// * 클래스의 순서도 중요
// 하단 예시 코드는 클래스의 순서를 고려하지 않은 코드임
class PrivateClass;
class UnknownClass
{
public:
void FriendMemberFunction(PrivateClass& pc);
};
class PrivateClass
{
// 전역 함수 Friend로 지정 가능
friend void GlobalFunction(PrivateClass& pc);
// 모르는 클래스 안에 있는 멤버 함수를 Friend로 지정 가능
friend void UnknownClass::FriendMemberFunction(PrivateClass& pc);
// 하나의 클래스를 Friend로 지정 가능
friend class FriendClass;
private :
// Private로 지정된 것들은 자신과 Friend로 지정된 것들만 접근 가능하다.
int privateValue = 10;
};
class FriendClass
{
public :
void GetPrivateClassValue(PrivateClass &pc);
};
int main()
{
// 객체 생성
PrivateClass _PrivateClass;
FriendClass _FriendClass;
UnknownClass _UnknownClass;
// 호출
GlobalFunction(_PrivateClass);
_FriendClass.GetPrivateClassValue(_PrivateClass);
_UnknownClass.FriendMemberFunction(_PrivateClass);
return 0;
}
// 전역 함수
void GlobalFunction(PrivateClass& pc) {
cout << "Friend로 지정된 전역 함수는 PrivateClass의 비밀스런 값에 접근할 수 있다." << pc.privateValue << endl;
}
// Friend로 지정된 '클래스'의 멤버 함수
void FriendClass::GetPrivateClassValue(PrivateClass& pc)
{
cout << "Friend로 지정된 클래스는 PrivateClass의 비밀스런 값에 접근할 수 있다." << pc.privateValue << endl;
}
// 클래스가 Friend로 지정되지 않았지만 UnknownClass클래스의 멤버 함수는 Friend로 지정됨
void UnknownClass::FriendMemberFunction(PrivateClass& pc)
{
cout << "Friend로 지정된 멤버 함수는 PrivateClass의 비밀스런 값에 접근할 수 있다." << pc.privateValue << endl;
}
반응형
'Programming > C, C++' 카테고리의 다른 글
C++ 가상 함수(Virtual Function), 순수 가상 함수(Pure Virtual Function) (0) | 2022.11.18 |
---|---|
C++ 연산자 오버로딩 (0) | 2022.11.17 |
C++ 오류 해결 Error:C4996, strcpy, strncpy 사용시 에러 발생 (0) | 2022.11.16 |
LV3 C++ 접근지정자 (0) | 2022.09.21 |
LV3 C++ 클래스와 객체 (0) | 2022.09.14 |