2016-11-25 5 views
3

私はbase/superクラス/継承/とC++の仮想関数について学んでいます。ベース/スーパークラスのメンバの実装を見つける

以下は、ヘッダーファイルに設定されたGet/Set関数です。私はミューテータSetSize(int、int)を見ています。私は継承と仮想関数について理解するものから

class VTKCOMMONCORE_EXPORT vtkWindow : public vtkObject 
{ 
public: 
    vtkTypeMacro(vtkWindow,vtkObject); 
    void PrintSelf(ostream& os, vtkIndent indent); 
. 
. 
. 

     // Description: 
     // Set/Get the size of the window in screen coordinates in pixels. 
     virtual int *GetSize(); 
     virtual void SetSize(int,int); 
     virtual void SetSize(int a[2]); 

が、これは単に機能を設定している、とするかどうか、このヘッダにまたはいくつかの他のどこかに定義する必要があるということです。私が苦労しているのは、SetSizeがどこに定義されているかを知ることです。私はその値を私のメインに提供しますが、Sizeは変数に設定され、その変数は実際のウィンドウサイズを定義するより大きなプロセスに入ります。明らかに、どこに情報があるのか​​を教えてくれるわけではありませんが、メインで呼び出す方法、レンダラーの実際のウィンドウサイズを設定する方法を理解する方法はわかりません。

私は正しいことを意味し、正しい用語を使用していることを願っています。私はこの回答を見つけるために他に何を探すべきか分からないので、助けてください。

以下は私の質問VTKで

に私は答えを見つけ参照

/*========================================================================= 

    Program: Visualization Toolkit 
    Module: vtkWindow.h 

    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 
    All rights reserved. 
    See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 

    This software is distributed WITHOUT ANY WARRANTY; without even 
    the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
    PURPOSE. See the above copyright notice for more information. 

=========================================================================*/ 
// .NAME vtkWindow - window superclass for vtkRenderWindow 
// .SECTION Description 
// vtkWindow is an abstract object to specify the behavior of a 
// rendering window. It contains vtkViewports. 

// .SECTION see also 
// vtkRenderWindow vtkViewport 

#ifndef vtkWindow_h 
#define vtkWindow_h 

#include "vtkCommonCoreModule.h" // For export macro 
#include "vtkObject.h" 

class vtkUnsignedCharArray; 

class VTKCOMMONCORE_EXPORT vtkWindow : public vtkObject 
{ 
public: 
    vtkTypeMacro(vtkWindow,vtkObject); 
    void PrintSelf(ostream& os, vtkIndent indent); 

    // Description: 
    // These are window system independent methods that are used 
    // to help interface vtkWindow to native windowing systems. 
    virtual void SetDisplayId(void *) = 0; 
    virtual void SetWindowId(void *) = 0; 
    virtual void SetParentId(void *) = 0; 
    virtual void *GetGenericDisplayId() = 0; 
    virtual void *GetGenericWindowId() = 0; 
    virtual void *GetGenericParentId() = 0; 
    virtual void *GetGenericContext() = 0; 
    virtual void *GetGenericDrawable() = 0; 
    virtual void SetWindowInfo(char *) = 0; 
    virtual void SetParentInfo(char *) = 0; 

    // Description: 
    // Set/Get the position in screen coordinates of the rendering window. 
    virtual int *GetPosition(); 
    virtual void SetPosition(int,int); 
    virtual void SetPosition(int a[2]); 

    // Description: 
    // Set/Get the size of the window in screen coordinates in pixels. 
    virtual int *GetSize(); 
    virtual void SetSize(int,int); 
    virtual void SetSize(int a[2]); 

    // Description: 
    // GetSize() returns the size * this->TileScale, whereas this method returns 
    // the size without multiplying with the tile scale. 
    int *GetActualSize(); 

    // Description: 
    // Get the current size of the screen in pixels. 
    virtual int  *GetScreenSize() = 0; 

    // Description: 
    // Keep track of whether the rendering window has been mapped to screen. 
    vtkSetMacro(Mapped,int); 
    vtkGetMacro(Mapped,int); 
    vtkBooleanMacro(Mapped,int); 

    // Description: 
    // Turn on/off erasing the screen between images. This allows multiple 
    // exposure sequences if turned on. You will need to turn double 
    // buffering off or make use of the SwapBuffers methods to prevent 
    // you from swapping buffers between exposures. 
    vtkSetMacro(Erase,int); 
    vtkGetMacro(Erase,int); 
    vtkBooleanMacro(Erase,int); 

    // Description: 
    // Keep track of whether double buffering is on or off 
    vtkSetMacro(DoubleBuffer,int); 
    vtkGetMacro(DoubleBuffer,int); 
    vtkBooleanMacro(DoubleBuffer,int); 

    // Description: 
    // Get name of rendering window 
    vtkGetStringMacro(WindowName); 
    vtkSetStringMacro(WindowName); 

    // Description: 
    // Ask each viewport owned by this Window to render its image and 
    // synchronize this process. 
    virtual void Render() = 0; 

    // Description: 
    // Get the pixel data of an image, transmitted as RGBRGBRGB. The 
    // front argument indicates if the front buffer should be used or the back 
    // buffer. It is the caller's responsibility to delete the resulting 
    // array. It is very important to realize that the memory in this array 
    // is organized from the bottom of the window to the top. The origin 
    // of the screen is in the lower left corner. The y axis increases as 
    // you go up the screen. So the storage of pixels is from left to right 
    // and from bottom to top. 
    // (x,y) is any corner of the rectangle. (x2,y2) is its opposite corner on 
    // the diagonal. 
    virtual unsigned char *GetPixelData(int x, int y, int x2, int y2, 
             int front) = 0; 
    virtual int GetPixelData(int x, int y, int x2, int y2, int front, 
          vtkUnsignedCharArray *data) = 0; 

    // Description: 
    // Return a best estimate to the dots per inch of the display 
    // device being rendered (or printed). 
    vtkGetMacro(DPI,int); 
    vtkSetClampMacro(DPI,int,1,VTK_INT_MAX); 

    // Description: 
    // Attempt to detect and set the DPI of the display device by querying the 
    // system. Note that this is not supported on all backends, and this method 
    // will return false if the DPI could not be detected. Use GetDPI() to 
    // inspect the detected value. 
    virtual bool DetectDPI() { return false; } 

    // Description: 
    // Create a window in memory instead of on the screen. This may not be 
    // supported for every type of window and on some windows you may need to 
    // invoke this prior to the first render. 
    vtkSetMacro(OffScreenRendering,int); 
    vtkGetMacro(OffScreenRendering,int); 
    vtkBooleanMacro(OffScreenRendering,int); 

    // Description: 
    // Make the window current. May be overridden in subclasses to do 
    // for example a glXMakeCurrent or a wglMakeCurrent. 
    virtual void MakeCurrent() {} 

    // Description: 
    // These methods are used by vtkWindowToImageFilter to tell a VTK window 
    // to simulate a larger window by tiling. For 3D geometry these methods 
    // have no impact. It is just in handling annotation that this information 
    // must be available to the mappers and the coordinate calculations. 
    vtkSetVector2Macro(TileScale,int); 
    vtkGetVector2Macro(TileScale,int); 
    void SetTileScale(int s) {this->SetTileScale(s,s);} 
    vtkSetVector4Macro(TileViewport,double); 
    vtkGetVector4Macro(TileViewport,double); 

protected: 
    int OffScreenRendering; 
    vtkWindow(); 
    ~vtkWindow(); 

    char *WindowName; 
    int Size[2]; 
    int Position[2]; 
    int Mapped; 
    int Erase; 
    int DoubleBuffer; 
    int DPI; 

    double TileViewport[4]; 
    int TileSize[2]; 
    int TileScale[2]; 

private: 
    vtkWindow(const vtkWindow&); // Not implemented. 
    void operator=(const vtkWindow&); // Not implemented. 
}; 

#endif 
+0

いいえ、意味がありません。 'setSize()'は 'getSize()'が定義されるところで定義されます。通常、このクラスのすべてのメンバを実装する同じ翻訳単位内にあります。 –

+0

ええどちらもここでは定義されていない、彼らは多くの機能が設定されていますが、定義されていない、私はVS2015のresharperを使用しようとしたが、それが実装されて定義されている場所を追跡することはできません。 –

答えて

0

オクラホマための全体のヘッダファイルで対応するファイルheader.cxxを持っているがheader.hすべてのヘッダファイル。関数定義はheader.cxxファイルで行われます。

+0

C++へようこそ!あなたはC/C++で重要かつ共通のパターンを特定しました。一つのファイルで定義を提供し、別のファイルで定義を提供します。私は、このトピックと他のものに触れる[優れたウェブサイトのチュートリアル](http://www.cplusplus.com/forum/articles/10627/)を指摘するコメントを残しています。また、ヘッダーファイル用に '.hpp'と' .hxx'ファイル拡張子、そしてソースファイル用に '.cpp'があるかもしれないことにも言及する価値があります。 C++コードでは '.h'と' .c'、* .cppでは '.hpp' /' .hxx'と '.cpp' /' .cxx'を使うことがあります。標準ではありませんが、あなたのプロジェクトが混在していればうれしいです。ハッピーC++! – sjm324

+0

ありがとうございます。 –

関連する問題