абстрактный класс — синтаксис переопределения C ++

Я работаю с PCSDK от Intel, есть часть, которую я не могу синтаксически понять из примера, где конструктор абстрактного класса переопределяется. В частности, эта строка:

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;
};

2

Решение

Это список инициализаторов который инициализирует базовый класс и переменную-член:

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

Другие решения

Это список инициализатора конструктора, используемый для указания того, как инициализировать базовые подобъекты и члены данных до начала тела конструктора.

Это одно значение — инициализирует базовый подобъект, затем инициализирует m_render член, передав строку в свой конструктор. Другой элемент данных инициализируется по умолчанию, так как он не отображается в списке.

1

Это список инициализаторов членов.

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

сначала инициализирует базовый класс конструктором по умолчанию UtilPipeline затем инициализирует m_render с m_render(L"Gesture Viewer"), Наконец, он входит в тело функции и выполняет EnableGesture(),

1

Это список инициализации. Вы инициализируете этот элемент в классе. Краткое руководство. Запятая разделяет элементы, которые вы инициализируете. Он вызывает базовый конструктор и затем инициализирует свои собственные элементы.

1
По вопросам рекламы [email protected]