개발개발/c++
c++의 friend키워드, 본인 복제함수
유잉유잉유잉
2024. 12. 12. 13:56
728x90
▶️ friend 키워드
지정하는 클래스에서 이 클래스의 private에 접근할 수 있게 해준다.
// CTest1.h
class CTest1
{
// CTest2를 friend 클래스 선언
friend class CTest2;
// 생성자, 소멸자 private으로 선언
private :
CTest1();
~CTest1();
public :
bool Init();
}
//Ctest2.cpp
class CTest2
{
void Init()
{
// 생성 가능
CTest1 test1 = new CTest1;
}
}
▶️ 본인 복제하기
// CMonster.h
class CMonster
{
private :
CMonster();
~CMonster();
private :
char mName[32] = {};
int mHp = 0;
int mAttack = 0;
public :
// 자신을 복제한 새로운 몬스터 생성
CMonster * Clone();
}
// CMonster.cpp
CMonster* CMonster::Clone()
{
// CMonster 타입의 새로운 객체를 만들어주고 그 주소를 반환.
// 인자로 자신을 넣고, 자신을 복제한 새로운 객체가 만들어짐.
return new CMonster(*this);
}
▶️ 전방선언
- '어딘가에 지정하는 타입의 클래스가 있다.' 라는 약속을 하고
포인터 변수를 선언할 수 있게 해주는 기능.
- 실제 사용부분에서 include를 한다.
// A.h
class A
{
friend class B;
friend class C;
private :
A();
~A();
}
// B.h
// 아래 class A가 전방선언
// #include를 사용하지 않고 A클래스 포인터를 사용가능
class A;
class B
{
private :
A * mA = nullptr;
}
//C.h
class C
{
private:
// 앞에 class를 붙여서 전방선언도 가능하다.
class A * mA = nullptr;
}
- 가급적 헤더 말고 사용할 cpp에서 헤더를 참조하기
- 헤더에서 무분별하게 헤더를 참조할 경우 순환참조(서로 참조하는 모양)될 가능성이 높음.
728x90