[C++] #3 생성자 (Construcotr) 포스팅에서 생성자 문법을 이용해 멤버에 값을 할당하는 방법에 대해 정리했다.
하지만, 이는 값을 "할당" 하는 것이지 "초기화"하는 것은 아니다.
// 할당
int a;
a = 10;
// 초기화
int a = 10;
이번 포스팅 에서는 생성자에 멤버 초기화 리스트 (Member Initializer List) 문법을 이용해 클래스의 멤버에 값을 "초기화" 하는 방법에 대해 간략하게 정리해 보고자 한다.
* 개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.
# 멤버 초기화 리스트 _ Member Initialier List
멤버 초기화 리스트의 사용 방법은 다음과 같다.
1. 생성자의 괄호 오른쪽에 콜론(:)을 붙여서 표기한다.
2. 초기화할 멤버를 쉼표로 구분하여 표기하며, 소괄호() 를 이용해서 초기화한다.
다음 예제는 Player() 생성자에 멤버 초기화 리스트를 이용해 멤버를 초기화 한 예제이다.
class Player {
private:
string m_name;
int m_level;
int m_hp;
int m_mp;
int m_atk;
public:
// Constructor_ 멤버 초기화 리스트 사용 X
// Player() {
// m_name = "Player";
// m_level = 10;
// m_hp = 100;
// m_mp = 10;
// m_atk = 10;
// }
// Member Initializer List
Player() : m_name("Player"), m_level(10), m_hp(100), m_mp(10), m_atk(10)
{
}
};
멤버 초기화 리스트를 사용하면 무엇보다 코드가 보기에 간결하고 깔끔해진다!
물론 사용해야 하는 이유가 단순히 보기 좋게 하기 위함만은 아니다. const 나, 참조(&) 변수를 클래스의 멤버로 사용할 때는 반드시 멤버 초기화 리스트를 사용해서 초기화 해야한다.
왜냐하면 const혹은 참조(&)변수는 생성과 동시에 값을 할당 받아야 하기 때문이다.
Player 클래스에 const 상수 m_id 라는 멤버를 private 필드에 추가 시켰다. 이전처럼 생성자를 이용해 값을 "할당" 하니 에러가 발생한다.
class Player {
private:
string m_name;
const int m_id;
int m_level;
int m_hp;
int m_mp;
int m_atk;
public:
Player() {
m_name = "Player";
// 에러 발생
m_id = 1111;
m_level = 10;
m_hp = 100;
m_mp = 10;
m_atk = 10;
}
};
멤버 초기화 리스트를 사용해 m_id 값을 "초기화" 하는 방식으로 수정하니 에러가 발생하지 않는다.
class Player {
private:
string m_name;
const int m_id;
int m_level;
int m_hp;
int m_mp;
int m_atk;
public:
// Member Initializer List
Player() : m_name("Player"), m_id(1111), m_level(10), m_hp(100), m_mp(10), m_atk(10)
{
}
};
'Archive > C&C++' 카테고리의 다른 글
[C++ STL] find() - 범위(Vector, Array..) 내에서 값을 탐색하는 함수 (0) | 2022.05.19 |
---|---|
[C++] range-based-for 범위 기반 for문 _ 미완성 (0) | 2022.03.17 |
[C++] #3 생성자 (Constructor) (0) | 2022.02.23 |
[C++] #2 getter setter 함수 (0) | 2022.02.22 |
[C++] #1 클래스 (Class) (0) | 2022.02.22 |