[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
댓글을 사용할 수 없습니다.