[C++] 전방선언
전방선언
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
헤더 추가 ver. vs. 전방선언
Ver1. 헤더를 추가하여 클래스 정보를 불러오는 방법
- #include로 헤더를 추가한다.
- 클래스 사이즈만큼 불러온다.
- 클래스 사이즈만큼 불러오기 때문에 클래스의 크기가 크면 메모리 소모가 크다.
Ver2. 전방선언을 하고 참조 형태로 가지고 오는 방법
- class 클래스명 형식으로 전방선언한다.
- 클래스를 참조해서 데이터를 사용한다.
- 포인터 사이즈만큼만 메모리가 필요하다. (32bit 운영체제는 4byte, 64bit 운영체제는 8byte 사용). 고정 사이즈다!
Monster.h
#pragma once
class Monster{
public:
void KillMe();
public:
int _monsterId; // +0
int _hp; // +4
int _defence; // +8
};
Monster.cpp
#include "Monster.h"
void Monster::KillMe()
{
_hp = 0;
}
Player.h
#pragma once
#include "Monster.h"
class Player{
public:
void KillMonster();
void KillMonster2();
public:
int _hp;
int _attack
Monster _target; // ver.1 : Monster를 직접적으로 포함하고 있는 상태. Monster사이즈만큼 불러옴.
// Monster의 설계도를 가져와야하는 상황. "Monster.h" 필요
class Monster* _target2;// ver.2 : Monster를 참조. 포인터 사이즈만큼만 필요함(고정 사이즈).
// Monster 설계도 필요x. "Monster.h" 필요x. 전방선언 필요.
Player* _target3; // 클래스 내에 자신과 똑같은 형태로 등장하는 경우 되도록 포인터 형태로 작업하자.
};
Player.cpp
#include "Player.h"
#include "Monster.h"
void Player::KillMonster()
{
// [ 주소 ] => [ [_monsterId][_hp][_defence] ] ->> [ [_monsterId][_hp=0][_defence] ]
_target2->_hp = 0; // _target2주소로 이동한 다음 _hp에 0을 넣어주세요
(*_target2)._hp = 0; // 위와 같은 표기
_target2->KillMe();
}
void Player::KillMonster2()
{
_target2->_hp = 0;
}
메인.cpp
#include <iostream>
using namespace std;
#include "Player.h" // 우리가 만든 헤더""
int main()
{
// Player는 몇 바이트?
// int 2개 + sizeof(Player*) 32비트 기준 = 2 * 4 + 4 = 12 byte
// sizeof(Monster*) = 4 or 8바이트 (32비트 or 64비트 운영체제 프로그램)
Player p1; // 지역변수 (Stack)
Player* p2 = new Player(); // 동적할당 (Heap)
p1._target3 = p2;
return 0;
}
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 함수 포인터 2 (0) | 2022.04.16 |
---|---|
[C++] 함수 포인터 1 (0) | 2022.04.15 |
[C++] 캐스팅: static, dynamic, const, reinterpret cast (0) | 2022.04.10 |
[C++] 얕은 복사 vs 깊은 복사 2 (0) | 2022.04.10 |
[C++] 얕은 복사 vs 깊은 복사 1 (0) | 2022.04.09 |
댓글
이 글 공유하기
다른 글
-
[C++] 함수 포인터 2
[C++] 함수 포인터 2
2022.04.16 -
[C++] 함수 포인터 1
[C++] 함수 포인터 1
2022.04.15 -
[C++] 캐스팅: static, dynamic, const, reinterpret cast
[C++] 캐스팅: static, dynamic, const, reinterpret cast
2022.04.10 -
[C++] 얕은 복사 vs 깊은 복사 2
[C++] 얕은 복사 vs 깊은 복사 2
2022.04.10