6.5. 초기화 리스트

phoenixKim·2021년 8월 27일
0

fundamental c++

목록 보기
5/14

6.51 왜 초기화리스트를 사용해야 할까?

1. 생성자의 선처리 영역에 관하여

: 이전에 배웠듯이 부모와 다른 클래스를 멤버로 가질 경우,
생성자의 선처리 영역에서는 무조건 부모와 다른 클래스의 기본 생성자를 호출하게 된다.
하지만, 이니셜라이저를 이용하면 부모와 다른 클래스의 인자가 있는 생성자를 호출할 수 가 있다.

  • 부모 클래스

  • 외부 클래스

  • 자식과 Main부

    -> 인자가 잇는 생성자를 호출하기 위해서는 이니셜라이저에 인자값을 넣은 생성자를 작성하면된다.

  • 변경된 코드


이니셜라이저가 반드시 필요한 코드

  • 부모와 외부클래스 : 기본 생성자 없음

  • main부 : 기본 생성자가 없어서 오류 발생한다.

    -> 이때는 반드시 초기화리스트로 초기화를 하자.
    번거롭게 부모와 외부클래스에 기본생성자 만들 필요까지는 없다.

알게된점.

  • 이니셜라이저에서 외부 클래스나 부모 클래스의 작성된 순서는
    부모나 외부 클래스의 변환생성자 호출의 순서에 영향을 끼치지는 않는다.
    클래스 내부에 작성된 순서대로 호출된다. 부모 -> 멤버 클래스

  • 부모 클래스나, 외부클래스의 생성자 호출을 막는 것은 불가능하다.

6.5.2 초기화리스트의 주의할점

: 멤버라고 해서 모두 초기화리스트에 포함시킬 수 있는 것은 아니다.

멤버가 클래스 타입일 경우, 이니셜라이저가 해당 클래스의 생성자를 호출한다고 알고 있다.
여기서 멤버는 말그대로 클래스에 적힌 클래스 만을 의미한다.
적힌 클래스 내부의 멤버까지 포함되는 것은 아니다!
물려받은 멤버변수를 초기화하는 것은 부모의 생성자에서 초기화를 하자!

6.5.3 그 외 초기화리스트를 사용하는 경우

  • 멤버가 레퍼런스 타입이거나 const타입 일 경우
    : 왜냐하면 레퍼런스나 const의 경우 선언과 동시에 초기화를 해야 하는데,
    컴파일러는 생성자의 선처리 영역에서는 객체가 최초로 초기화될 수 있다고 생각을 하기 때문이다!
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보