본문 바로가기

[C,C++]

[C,C++ 개념정리] Member initializer list

728x90

 < Member initializer list >

 

  생성자 부분과 겹쳐 포스팅할 걸 그랬나봐;; constructor initializer를 사용할 때 다음과 같이 :콜론으로 initialize를 list형태로 시켜줄 수도 있다. 단순한 구조는 다음과 같다.

class Something
{
private:
    int m_i;
    double m_d;
    char m_c;

public:
    Something() 
    	: m_i(1), m_d(3.14), m_c('a')
        
    void func()
    {

    }
    
};

 

- 코드 - 

/*
    <2020.04.08>

    [8.4강 생성자 맴머 이니셜라이져 리스트 (Member initializer list) ]

*/

#include <iostream>
using namespace std;

class B
{
private:
    int m_b;

public:
    B(const int& m_b_in)
        : m_b(m_b_in)
    { }        

};

class Something
{
private:
    int m_i;
    double m_d;
    char m_c;
    int m_arr[5];
    B  m_b;

public:
    Something()
        : m_i(1), 
        m_d(3.14), 
        m_c('a'), 
        m_arr{1,2,3,4,5} // 이런식으로 가능하다!!, 
        // 물론 uniform initializer로도 가능하지만, 이떄는 형변환을 지원하지 않는다.
        ,m_b(m_i -1) // 매개변수 물론 가능.
    {
        m_i *= 2;  // 리스트 실행 뒤에 이게 실행된다.
        m_c += 1;
    }

    void print()
    {
        cout << m_i << " " << m_d << " " << m_c << endl;

        for(auto& e : m_arr)
            cout << e << " ";
        cout << endl;    
    }
};

int main()
{
    Something som;
    som.print();

    return 0;
}

 

 - 출력 결과 -

728x90