C++에서는 상수인 클래스 멤버를 초기화시키기 위하여 특별한 문법을 제공합니다.
문제 상황 및 해결
일반적으로 상수인 클래스 멤버를 생성자를 통하여 초기화시키지 못합니다.
그래서 생성자의 코드 실행전인 객체가 생성될 때 초기화해야 합니다.
#include <iostream>
class Person {
const int age;
Person(int p_age) {
age = p_age; //허용안됨
}
};
int main(void) {
}
위에 방법으로는 상수인 클래스 멤버를 초기화할 수 없습니다.
그래서 나온게 멤버 초기자 리스트입니다.
#include <iostream>
class Person {
const int age;
Person(int p_age) : age(p_age){//허용됨
}
};
int main(void) {
}
위와 같은 방법으로 초기화시킬 수 있습니다.
생성자 매개변수 뒤에 콜론(:)을 붙이고 클래스멤버(값)을 써주면 됩니다.
#include <iostream>
class Person {
const int age;
int a;
Person(int p_age) : age(p_age),a(10) {//허용됨
}
};
int main(void) {
}
하나가 아닌 여러 개도 가능합니다.
멤버 초기자 리스트를 사용할 때 주의사항
-
생성자에서만 사용이 가능하다.(즉 다른 클래스 메서드에서는 사용이 불가능하다.)
-
C++11 이전에는 const 데이터 멤버를 초기화하려면 멤버 초기자 리스트를 사용해야 한다.
-
참조 데이터 형식을 초기화 해야할때도 멤버 초기자 리스트를 사용해야 한다.
In-Class 초기화
C++11에서는 멤버 In-Class 초기화라는 게 있습니다.
#include <iostream>
class Person {
const int age=10; //In-Class 초기화
int a = 0; //In-Class 초기화
Person(){
}
};
int main(void) {
}
단 이경우에는, 특정값을 대입받아 상수의 값이 지정될 수 없습니다.
댓글