2013-07-30 100 views
1
//***************************************************************************** 
// d3dApp.h by Frank Luna (C) 2011 All Rights Reserved. 
// 
// Simple Direct3D demo application class. 
// Make sure you link: d3d11.lib d3dx11d.lib D3DCompiler.lib D3DX11EffectsD.lib 
//      dxerr.lib dxgi.lib dxguid.lib. 
// Link d3dx11.lib and D3DX11Effects.lib for release mode builds instead 
// of d3dx11d.lib and D3DX11EffectsD.lib. 
//***************************************************************************** 

#ifndef D3DAPP_H 
#define D3DAPP_H 

#include "d3dUtil.h" 
#include "GameTimer.h" 
#include <string> 

class D3DApp 
{ 
    public: 
    D3DApp(HINSTANCE hInstance); 
    virtual ~D3DApp(); 

    HINSTANCE AppInst()const; 
    HWND  MainWnd()const; 
    float  AspectRatio()const; 

    int Run(); 

    // Framework methods. Derived client class overrides these methods to 
    // implement specific application requirements. 

    virtual bool Init(); 
    virtual void OnResize(); 
    virtual void UpdateScene(float dt)=0; 
    virtual void DrawScene()=0; 
    virtual LRESULT MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 

    // Convenience overrides for handling mouse input. 
    virtual void OnMouseDown(WPARAM btnState, int x, int y){ } 
    virtual void OnMouseUp(WPARAM btnState, int x, int y) { } 
    virtual void OnMouseMove(WPARAM btnState, int x, int y){ } 

有人可以向我解釋爲什麼UpdateSceneDrawScene設置爲0?那個語法是什麼意思?C++虛擬功能

+1

它被稱爲[「純虛函數」](http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/): ) – paulsm4

回答

1

此語法表示「純虛函數」。通過將一個或多個函數聲明爲純虛函數,可以使您的類變爲抽象類(不能實例化)。你打算在孩子的實現中實現這些「純虛擬」功能。但是,您可以在抽象類中具有純虛函數的主體,以防您想從其中一個派生對象調用父版本。

3

這些方法旨在由派生類使用D3DApp作爲基礎來實現。如果它們沒有實現,則在派生類的實例化過程中會生成編譯時錯誤。基本上這是使這些方法實現爲強制性的設計選擇。