2010-02-28 3 views
15

저는 C++을 배우면서 그것을 이해하려고합니다. 나는 몇 가지 코드를 통해보고 및 보았다 :생성자의 콜론 뒤에 오는 변수

point3(float X, float Y, floatZ) : 
x(X), y(Y), z(Z) // <----- what is this used for 
{ 
} 

이의 의미 "X (X), Y (Y), Z (Z)"생성자의 매개 변수 옆에 앉아 무엇입니까? 귀하의 예를 point3에서

+1

중복 된 http://stackoverflow.com/questions/1272680/c-constructor-syntax-question-noob. http://stackoverflow.com/questions/1632484/c-initialization-question – outis

답변

17

이것은 point3 클래스 멤버의 생성자를 호출하는 방법입니다. x, y 및 z는 플로트 인 경우, 이것은 기입 단지 더 효율적인 방법이

point3(float X, float Y, float Z): 
{ 
    x = X; 
    y = Y; 
    z = Z; 
} 

하지만, X, Y & Z는 클래스 인 경우, 이것은 그 생성자에 파라미터를 전달하는 유일한 방법이며

+0

명확히하기 : 멤버가 PoD 유형이 아닌 경우 멤버가 기본 생성되지 않으며 초기화 목록을 사용하면 멤버에서 복사 생성자를 호출 할 필요가 없습니다. 따라서 더 효율적입니다. – greyfade

+1

**'PoD' = "일반 오래된 데이터" – isomorphismes

4

같은 이름 (point3)와 클래스의 constructor{initialization list, 인 여는 괄호 앞에 콜론 :의 오른쪽에있는 물건이다 차례 구조에서 (즉,이 초기화) point3의 멤버 변수 (그리고 어느 경우 [ES] 기본 클래스 생성자 인수를 전달하는데 사용될 수있다.)

9

Initialization list

This 문서 (판독한다) 알 회원 초기화 목록에 대해 설명합니다

+3

불행히도 필자는 더 이상 필독서를 읽지 않으며, 이것을 읽을 때 초기화 목록 페이지가 로딩되지 않았습니다. 죽은 링크가 문제가되지 않도록 답변을 확장 할 수 있습니까? – Ceribia

0

다른 사람이 지적한대로 회원 초기화. 그러나 다음을 아는 것이 더 중요합니다.

인수가 float 또는 다른 기본 제공 형식 인 경우 할당 (생성자 본문에서) 대신 멤버 초기화를 사용하는 경우를 제외하면 분명한 이점이 없습니다. C++에서 더 관용적입니다.

명백한 장점은 인수가 사용자 정의 클래스 인 경우이 멤버 초기화는 생성자 본문에서 할당을 사용하여 완료되면 기본 생성자와 달리 생성자를 복사하도록 호출합니다.

관련 문제