ecsimsw

std::initializer_list / 생성자 리스트 본문

std::initializer_list / 생성자 리스트

JinHwan Kim 2019. 4. 5. 05:36

std::initializer_list

  • initializer list
    className (parameter) : varName1(arg), varName2(arg) {};
    - 위의 형식으로 생성자를 정의하는 것으로 생성과 동시에 멤버 변수를 초기화 하고, 이를 생성자 리스트라고 한다.
    #include <iostream> using namespace std; class myclass { int integer; char character; public: myclass(): integer(10), character('A'){};// constructor definition. // ": integer(10), character('C')" is the initializer list // ": integer(10), character('C') {}" is the function body void show(){ cout<<"integer : " <<integer << " character : " << character <<endl; } }; int main() { myclass testA; testA.show(); }
    - 생성자 리스트의 장점은 앞서 말했 듯 "생성과 동시에" 멤버를 초기화한다는 것에 있다. 기존의 방식으로 생성자를 "member_var = value"로 정의한다면, 변수를 생성하고, 그 뒤를 이어 변수에 값을 대입하기 때문에 아래의 예시처럼 에러를 내고 const로 선언한 상수는 초기화할 수 없다.
    int var1; var1 = 1; const var2; var2 = 2; // Error _ read only data
      하지만 생성자 리스트를 사용하면 생성과 동시에 대입하므로 const 상수를 초기화 할 수 있는 것이다.
    int var3 = 3; const var4 = 4;
      아래 예시는 const 변수 초기화와 파라미터가 있는 생성자를 초기화 리스트로 초기화하는 것을 확인 할 수 있는 코드이다.
    #include <iostream> using namespace std; class myclass { int integer; char character; const float float_const; public: myclass(int i, char c): integer(i), character(c), float_const(5.0) {}; void show(){ cout<<"integer : " <<integer << " character : " << character << " float_const : "<<float_const<<endl; } }; int main() { myclass testA(10,'A'); testA.show(); }

'Language > C++, C#' 카테고리의 다른 글

Function pointer / 함수 포인터  (0) 2019.04.20
object factory / 오브젝트 팩토리  (0) 2019.04.11
scope resolution operator / namespace  (0) 2019.04.02
C# / Params  (0) 2019.03.15
C# / Accessing variable value by name  (0) 2019.03.08
Comments