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) {
        
}

단 이경우에는, 특정값을 대입받아 상수의 값이 지정될 수 없습니다.

댓글을 달아 주세요