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
'개발개발 > c++' 카테고리의 다른 글
c++의 순수가상함수, 오버라이드, 다중상속, final, 생성자에서 initialize (0) | 2024.12.16 |
---|---|
c++의 클래스 상속, 클래스 캐스팅, 가상함수 (0) | 2024.12.13 |
c++의 클래스, 접근지정자, 생성자와 소멸자, 얕은복사(shallowCopy)와 깊은복사(DeepCopy), 메모리 단편화와 해결방안, 싱글턴패턴 (0) | 2024.12.11 |
c++의 파일 입출력 (1) | 2024.12.10 |
c++의 include define, extern, memcpy_s (0) | 2024.12.09 |
댓글