본문 바로가기

PL/C & C++

[C++] 멤버 이니셜라이저

위에서 쓰인 멤버 이니셜라이저에 대해 간단히 알아보도록 합시다. 이 멤버 이니셜라이저는, 방금처럼 부모 클래스의 멤버 변수를 초기화 하기 위해서 생성자 함수를 호출한다던가, 클래스 내의 변수를 초기화한다던가, const 변수를 초기화 할때도 사용됩니다. 멤버 이니셜라이저는 생성자의 몸체 부분보다 먼저 실행된다는 특징을 가지고 있습니다. 간단히 멤버 이니셜라이저에 대한 예제를 살펴보도록 합시다.

 

 

 

코드를 살펴보시면, 5~15행에 memInit란 클래스가 정의되어 있고, 그 안에는 num1, num2라는 private 멤버와 생성자, num1과 num2를 출력하는 ShowInfo 함수가 존재합니다. 10행을 잘 보시면, 콜론(:) 연산자 뒤에 "num1(_num1), num2(_num2)"와 같이 쓰였는데, 이는 _num1의 값으로 num1을 초기화하고, _num2의 값으로 num2를 초기화 한다는 말입니다. 19행에서 mi 객체를 만들고, 생성자에게 50과 70이란 값을 넘겨주는데, 여기서 멤버 이니셜라이저를 통해 멤버 변수가 초기화 되고, 생성자의 몸체 부분이 실행됩니다. 21행에서 ShowInfo 함수를 통해 출력하고 결과를 확인하면, 정상적으로 초기화 됨을 보실수 있습니다. 정말 간단하죠?


 

 

C++ 강좌 12편. 상속(Inheritance)

1. 상속(Inheritance)이란? 여러분이 알고계시는 '상속(Inheritance)'은 무엇인가요? 물론, 이미 타 언어에서 상속을 미리 만나보신 분들도 있겠지만, 아닌 분들도 계실겁니다. 상속은 "일정한 친족적 관

blog.hexabrain.net

5. 멤버 이니셜라이저(member initializer)

 

멤버 변수를 초기화하는 방법 중 하나로 지금 까지 설명한 생성자를 통한 멤버 변수 초기화 방법보다 성능이 뛰어나다고 알려져 있다.  이유는 바이너리 코드 상에서 그냥 생성자를 사용해 초기화할 경우 

int num1;

num1 = 10;

과 같이 구성되어 초기화되지만 이니셜라이저를 사용할 경우

int num1 = 10;

로 초기화가 동시에 진행되어 좀 더 뛰어난 성능을 발휘할 수 있다. 또한 이와 같은 이유로 const 멤버의 경우 생성과 동시에 초기화되어야 하기 때문에 const 멤버 변수는 이니셜라이저를 통해 초기화를 해야 한다.

 

생성자이므로 클래스명을 그대로 사용하고 콜론(:)을 통해 멤버 변수 목록을 사용한다. 멤버 변수 옆의 ()안의 값으로 각각 멤버 변수를 초기화하게 되며 멤버 변수의 구분은 쉼표(,)를 이용한다. 추가 초기화 부분은 필요시에만 작성하면 된다.

 

문법)

클래스명():멤버 변수1(값 또는 변수), 멤버 변수2(값 또는 변수),..{ 추가 초기화 }

 

 

 

 

 

'PL > C & C++' 카테고리의 다른 글

[C++] Rvalue 참조 선언자: &&  (0) 2021.03.04
[C++] 참조형 변수 : &  (0) 2021.03.04
[C++] char to int  (0) 2021.03.04
[C++] vector 탐색  (0) 2021.03.01
[C++] 문자열 입력  (0) 2021.02.26