class CarPlane { LONG m_cRef; CarPlane(void) : m_cRef(0) {} public: // Main IUnknown methods // Главные методы IUnknown STDMETHODIMP QueryInterface(REFIID, void**); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); private: // define nested class that implements ICar // определяем вложенный класс, реализующий ICar struct XCar : public ICar { // get back pointer to main object // получаем обратный указатель на главный объект inline CarPlane* This(); STDMETHODIMP QueryInterface(REFIID, void**); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP GetMaxSpeed(long *pval); STDMETHODIMP Brake(void); };
// define nested class that implements IPlane // определяем вложенный класс, реализующий IPlane struct XPlane : public IPlane { // Get back pointer to main object // получаем обратный указатель на главный объект inline CarPlane* This(); STDMETHODIMP QueryInterface(REFIID, void**); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP GetMaxSpeed(long *pval); STDMETHODIMP TakeOff(void); }; // declare instances of nested classes // объявляем экземпляры вложенных классов XCar m_xCar; XPlane m_xPlane; };