플로렌스라는 개발자

C++ 멤버 초기자 리스트(member initializer list)

프로그래밍/C++ 2019.10.17 댓글 0 Plorence

목차

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

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

    댓글

    0