본문 바로가기
개발개발/c++

c++의 friend키워드, 본인 복제함수

by 유잉유잉유잉 2024. 12. 12.
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

댓글