Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] 초기화 리스트 본문
#include <iostream>
using namespace std;
// 멤버 변수 초기화 ? 다양한 문법이 존재
// 초기화를 해야하는 이유
// - 버그 예방에 중요
// - 포인터 등 주소값이 연루되어 있을 경우
// 초기화 방법
// - 생성자 내에서
// - 초기화 리스트
// - C++11 문법 ex) int _hp = 100; // 모던 C++ 11 이전에서는 지원하지 않던 문법. 팀에 따라 사용하지 않을 수 있다.
// 초기화 리스트
// - 일단 상속 관계에서 원하는 부모 생성자 호출할 때 필요.
// - 생성자 내에서 초기화 vs 초기화 리스트
// -- 일반 변수는 별 차이 없음
// -- 멤버 타입이 클래스인 경우 차이가 생김
// -- 정의함과 동시에 초기화가 필요한 경우 (참조 타입, const 타입)
class Inventory
{
public:
Inventory() { cout << "Inventory()" << endl; }
Inventory(int size) { cout << "Inventory(int size)" << endl; _size = size; }
~Inventory() { cout << "~Inventory()" << endl; }
public:
int _size = 10;
}
class Player
{
public:
Player() { }
Player(int id) { }
}
// 고려해야 할 구조
// is-A (Knight is-A Player?) 기사는 플레이어인가? ) OK -> 상속관계
// has-A (Knight Has-A Inventory?) 기사는 인벤토리를 포함하고(가지고) 있다. ) OK -> 포함관계
class Knight
{
public:
Knight() : Player(1), _hp(100), _inventory(20), _hpRef(_hp), _hpConst(100) /*초기화 리스트*/
/*
선처리 영역
컴파일러가 자동으로 추가된 코드를 실행하는 구간.
우리가 명시적으로 지시를 내릴수도 있는데, 이것이 초기화 리스트이다.
C++11 문법으로는 선언과 동시에 초기화 할 수 있지만, 그 이전 버전을 사용하는 경우를 위한 초기화 리스트
*/
{
_hp = 100; // 일반 변수 초기화
// _inventory = Inventory(20); // 해당 주석을 실행 시 선처리 영역에서 이미 Inventory()의 생성자가 호출되었기에 필요 없는 생성, 소멸이 한번 더 일어나게 된다. 따라서 초기화 리스트에 지시하는것이 효율적이다.
// _hpRef = _hp; // 누군가를 꼭 가리키고 있어야함 ) 이미 선처리를 지나 생성되었기에 다른 값으로 수정 할 수 없다.
// _hpConst = 100; // 절대로 바뀔 수 없는 값 ) 이미 선처리를 지나 생성되었기에 다른 값으로 수정 할 수 없다.
}
public:
int _hp; // 초기화를 하지 않았으므로 쓰레기 값이 존재
Inventory _inventory; // 라이프 사이클이 Knight에 종속됨
int* _hpPtr; // 포인터 변수는 기본값으로 초기화 되어도 큰 상관이 없다.
int& _hpRef; // 참조 변수는 어떠한 것에 대해 부가적 이름을 지어주는 개념이기에 꼭 무언가를 가리키고 있어야한다.
const int _hpConst;
};
int main()
{
Knight k;
cout << k._hp << endl;
if (k._hp)
{
cout << "Knight is Dead" << endl;
}
return 0;
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
'Develop > C++' 카테고리의 다른 글
[C++] 객체지향 마무리 (0) | 2022.10.06 |
---|---|
[C++] 연산자 오버로딩 #1 ~ 2 (0) | 2022.10.05 |
[C++] 다형성 #1 ~ 2 (0) | 2022.09.28 |
[C++] 은닉성 (0) | 2022.09.21 |
[C++] 상속성 (0) | 2022.09.20 |