2

Intel의 PCSDK에서 작업하고 있는데, 추상 클래스의 생성자가 무시되는 샘플에서 구문 적으로 이해할 수없는 부분이 있습니다. 특히,이 라인 :C++ 재정의 구문

GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") { 
EnableGesture(); 
} 

UtilPipeline()와 m_render 사이의 쉼표는 무엇을 의미합니까? 여기 문맥 전체 코드는 :

#include "util_pipeline.h" 
#include "gesture_render.h" 
#include "pxcgesture.h" 
class GesturePipeline: public UtilPipeline { 
public: 
GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") { 
EnableGesture(); 
} 
virtual void PXCAPI OnGesture(PXCGesture::Gesture *data) { 
if (data->active) m_gdata = (*data); 
} 
virtual void PXCAPI OnAlert(PXCGesture::Alert *data) { 
switch (data->label) { 
case PXCGesture::Alert::LABEL_FOV_TOP: 
wprintf_s(L"******** Alert: Hand touches the TOP boundary!\n"); 
break; 
case PXCGesture::Alert::LABEL_FOV_BOTTOM: 
wprintf_s(L"******** Alert: Hand touches the BOTTOM boundary!\n"); 
break; 
case PXCGesture::Alert::LABEL_FOV_LEFT: 
wprintf_s(L"******** Alert: Hand touches the LEFT boundary!\n"); 
break; 
case PXCGesture::Alert::LABEL_FOV_RIGHT: 
wprintf_s(L"******** Alert: Hand touches the RIGHT boundary!\n"); 
break; 
} 
} 
virtual bool OnNewFrame(void) { 
return m_render.RenderFrame(QueryImage(PXCImage::IMAGE_TYPE_DEPTH), 
QueryGesture(), &m_gdata); 
} 
protected: 
GestureRender m_render; 
PXCGesture::Gesture m_gdata; 
}; 

답변

1

그것은베이스 클래스 멤버 변수를 초기화하는 리셋 initializer list있어 :

GesturePipeline (void) // constructor signature 
    : UtilPipeline(), // initialize base class 
    m_render(L"Gesture Viewer") // initialize member m_render from GesturePipeline 
{ 
    EnableGesture(); 
} 
+0

왜 이렇게 m_render를 초기화해야합니까? – Mike

+1

@Mike 이니셜 라이저 목록에서 뭔가를 초기화해야하는 데에는 몇 가지 이유가 있습니다. 1) 참조이므로 2) 기본값으로 초기화 할 수 없으므로 3) 멤버 변수가 'const'로 선언 되었기 때문입니다. 아마도 2)라고 생각할 것입니다. 물론 이것은 단지 더 효율적이기 때문에 단지 사용될지도 모릅니다. 기본 구성과 할당이 나중에 가능할지라도 많은 사람들이 선호하는 것으로 간주됩니다. –

1

이것은 생성자 본문이 시작되기 전에 기본 하위 개체와 데이터 멤버를 초기화하는 방법을 지정하는 데 사용되는 생성자의 초기화 프로그램 목록입니다.

이 하위 값은 기본 하위 개체를 값 초기화 한 다음 문자열을 생성자에 전달하여 m_render 멤버를 초기화합니다. 다른 데이터 멤버는 목록에 나타나지 않으므로 기본 초기화됩니다.

1

IT는 member initializer list.

GesturePipeline (void):UtilPipeline(),m_render(L"Gesture Viewer") { 
EnableGesture(); 
} 

첫 번째는 그것으로 기본 클래스 UtilPipeline 다음 m_render(L"Gesture Viewer")m_render 초기화 기본 생성자의 초기화입니다. 마지막으로 함수 본문에 입력하고 EnableGesture()을 실행합니다.

1

초기화 목록입니다. 클래스의 해당 요소를 초기화하고 있습니다. Quick tutorial. 쉼표는 초기화중인 요소를 구분합니다. 그것은 기본 생성자를 호출하고 자체 요소를 초기화합니다.