2013-07-30 102 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作为基础来实现。如果它们没有实现,则在派生类的实例化过程中会生成编译时错误。基本上这是使这些方法实现为强制性的设计选择。