일상 코딩
[C++/9.12] initialize_list 생성자 본문
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
'C++ > 따배C++ 09강 연산자 오버로딩' 카테고리의 다른 글
[C++/9.11] 대입"=" 연산자 오버로딩, 깊은 복사, 얕은 복사 문제점 및 해결 방법 (0) | 2021.10.31 |
---|---|
[C++/9.10] 변환 생성자, explicit, delete (0) | 2021.10.31 |
[C++/9.09] 복사 생성자, 복사 초기화 반환값 최적화 (0) | 2021.10.31 |
[C++/9.08] 형변환 오버로딩 typecast overloading (0) | 2021.10.30 |
[C++/9.07] 괄호"()" 연산자 오버로딩과 함수 객체 Functor (0) | 2021.10.30 |