[C++] 초기화 리스트(Initialize List)

SuLee·2021년 8월 25일
0

C++

목록 보기
5/8

📌 1. 초기화 리스트(Initialize List)

예시 1 과 같이 생성자 내부에서 복사 초기화를 할 시, 디폴트 생성자가 먼저 호출되고 그 이후에 대입이 이루어진다.

하지만 예시 2 와 같이 초기화 리스트(Initialize List) 를 이용하면 생성자가 호출될 때 멤버 변수를 동시에 초기화를 할 수 있다.

초기화 리스트(Initialize List) 는 아래와 같이 작성한다.

(클래스 이름)(자료형 인자 1, 자료형 인자 2, ...) : (멤버 변수 1)(인자 1), (멤버 변수 2)(인자 2), ... {}

예시 1 (복사 초기화)

class Date {
private:
    int year;
    int month;
    int day;
public:
    Date() {
        year = 2021;
        month = 8;
        day = 25;
    }
    Date(int _year, int _month, int _day) {
        year = _year;
        month = _month;
        day = _day;
    }

예시 2 (직접 초기화, 유니폼 초기화)

class Date {
private:
    int year;
    int month;
    int day;
public:
    Date() : year(2021), month(8), day(25) {}
    
    Date(int year, int month, int day) : year(year), month(month), day(day) {}
    // 멤버 변수와 인자의 이름이 같아도 정상적으로 작동

📌 2. 초기화 리스트를 사용해야 되는 경우

선언과 초기화를 동시에 해야 되는 상수 변수와 레퍼런스 변수가 멤버 변수에 있을 때는 초기화 리스트를 사용해야만 한다.

class Date {
private:
    const int year;
    int month;
    int day;
public:
    Date() : year(2021), month(8), day(25) {} // 가능
    
    Date() // 불가능
    {
        year = 2021; // 상수 변수에 대입할 수 없음
        month = 8;
        day = 25;
    }

또한 int, double과 같은 원시 자료형이 아닌 사용자가 정의한 클래스를 변수로 사용할 시, 초기화 리스트를 사용하면 대입 작업을 수행할 때보다 더 효율적으로 초기화를 할 수 있다.

0개의 댓글