2014-08-30 1 views
1

저는 C++에서 생성자가 어떻게 작동하는지 완전히 이해하려고합니다. 특히 생성자의 멤버 초기화 목록생성자가 인수의 멤버 초기화 목록 부분을 무시하고 생성자에 제공 되었습니까?

3 개의 데이터 멤버 bar, baz 및 qux가있는 클래스 Foobar가 있다고 가정 해보십시오. 수행하는 "기본"으로 멤버 초기화 목록 행위,

Foobar(int bar, int baz, int qux) 
    : bar(bar), baz(baz), qux(qux) 
{ 
    // empty constructor body 
} 

내 질문은 :

는이 같은 내 생성자를 설정? 또는 항상 발생합니까? 예를 들어, 인수를 사용하여 생성자가 호출 된 경우 초기화 목록이 무시됩니까? 달리 지정하지 않는 한, qux 데이터 멤버를 항상 0으로 유지하려고합니다.

: nar(bar), bar(baz), qux(0) 

은 아마도 나는 완전히 멤버 초기화 목록의 기능을 오해하고있어 어쩌면 누군가가 나를 직선 설정할 수 있습니다 : 그래서 내가 대신 멤버 초기화 라인을 작성합니다.

+1

당신의 혼동은 생성자의 매개 변수 이름이 멤버 이름과 동일하다는 사실 때문에 발생한다고 생각합니다. 이것이 합법적 인 반면, 매개 변수 앞에 밑줄을 붙이면 다른 이름을 사용하는 것이 좋습니다. –

+0

가능한 복제본 [이 생성자의 이상한 콜론 구성원 구문은 무엇입니까?] (http://stackoverflow.com/questions/1711990/what-is-this-weird-colon-member-syntax-in-the-constructor) – Timbo

+0

@BenjaminLindley 왜 모두가 알고있는 언어 규칙에 어리석은 밑줄을 사용합니까? #IdRatherNotUnderscore –

답변

1

이 생성자는 인수없이 호출 할 수 없으므로 세 가지 모두 필요합니다. 컴파일러는 잊어 버리면 알려줍니다.

회원을 항상 고정 된 값으로 초기화하려면이를 수행하는 방법이 사용자가 제안한 것입니다.

+0

또한 답안의 기본 인수로'qux = 0'에 대한 구문을 던질 수도 있습니다. –