250x250
Notice
Recent Posts
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
관리 메뉴

일상 코딩

[C++/9.12] initialize_list 생성자 본문

C++/따배C++ 09강 연산자 오버로딩

[C++/9.12] initialize_list 생성자

polarcompass 2021. 10. 31. 17:18
728x90
#include<iostream>
#include<cassert>
#include<initializer_list>
using namespace std;

class IntArray
{
private:
    unsigned m_length = 0;
    int *m_data = nullptr; // 동적할당

public:
    IntArray(unsigned length)
        : m_length(length)
    {
        m_data = new int[length];
    }

    // initialize_list 생성자.
    IntArray(const std::initializer_list<int> &list)
        : IntArray(list.size())
    {
        int count = 0;
        for(auto & element : list)
        {
            m_data[count] = element;
            ++count;
        }

        // for (unsigned count = 0; count < list.size(); ++count)
                // initialize_list는 list[count]의 대괄호 기능을 제공하지 않음.
        //     m_data[count] = list[count]; // error
    }

    // 소멸자
    ~IntArray()
    {
        delete[] this->m_data;
    }

    friend ostream & operator << (ostream & out, IntArray & arr)
    {
        for (unsigned i = 0; i < arr.m_length; ++i)
            out << arr.m_data[i] << " ";
        out << endl;
        return out;
    }
};

int main()
{
    // 정적 할당
                    // initialize list
    int my_arr1[5] = {1, 2, 3, 4, 5};

    // 동적 할당
    int *my_arr2 = new int[5]{1, 2, 3, 4, 5};

    // initialize_list를 자동으로 잡아준다.
    auto il = {10, 20, 30};

    // initialize_list를 자동으로 못 잡아주고
    // 따로 parameter를 initialize_list로 받는 생성자를 
    // 구현하면 아래 코드가 가능해진다.
    IntArray int_array{1, 2, 3, 4, 5, 7, 8, 9, 0};
    cout << int_array << endl;

    return 0;
}
728x90