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){ }

有人可以向我解释为什么UpdateScene并且DrawScene设置= 0吗?该语法是什么意思?

4

2 回答 2

3

这些方法旨在由D3DApp用作基础的派生类实现。如果它们没有实现,则在派生类的实例化过程中会产生编译时错误。使这些方法实现成为强制性基本上是一种设计选择。

于 2013-07-30T04:56:39.987 回答
1

这种语法意味着“纯虚函数”。通过将一个或多个函数声明为纯虚拟函数,您正在使您的类抽象(不能被实例化)。您打算在您孩子的实现中实现这些“纯虚拟”功能。但是,您可以在抽象类中拥有纯虚函数的主体,以防万一您想从派生对象之一调用父版本。

于 2013-07-30T05:02:49.440 回答