1

このようなヘッダーファイルがある場合:

#ifndef GAMEVIEW_H_
#define GAMEVIEW_H_

#include <SDL/SDL.h>

class GameView
{
public:
 GameView();
 virtual ~GameView();

 virtual void Update() = 0;
 virtual void Render(SDL_Surface* buffer) = 0;
};

#endif /* GAMEVIEW_H_ */

.cpp次のようなファイルを作成する必要があります。

#include "GameView.h"

GameView::~GameView()
{

}

GameView::GameView()
{
}

これは少しばかげています。空のコンストラクターとデコンストラクターの.cppファイルだけです。そのメソッドを単純にヘッダーファイルに実装したいと思います。それははるかにきれいです。

これを行う方法?

4

4 に答える 4

9

コンストラクタとデストラクタをインラインで定義できます(これは適切な用語です。デストラクタの代わりにこれを使用してください) 。

class GameView
{
public:
 GameView() {}
 virtual ~GameView() {}

 virtual void Update() = 0;
 virtual void Render(SDL_Surface* buffer) = 0;
};
于 2010-06-17T10:19:11.667 に答える
5

そのメソッドを単純にヘッダーファイルに実装したいと思います。それははるかにきれいです。

だからそれでいい。

// ...
GameView() { }
virtual ~GameView() { }
// ...

これを書く必要すらありません。コンパイラーは、デフォルトのコンストラクター自体を提供します。デフォルトでは仮想ではないため、必要なのはデストラクタだけです。

これらを.cppファイルで定義する必要があると聞いた場合、これは、クラスにメンバーとしてスマートポインターがある場合に必要になることがあります。経験則では、クラスにスマートポインターがあり、それらがヘッダーで前方宣言されたクラスを指している場合は、ポイント先のクラスを実際に定義する.cppファイルで常にコンストラクターとデストラクターを提供します。そうしないと、不完全なクラスの削除で問題が発生する可能性があります(多くの場合、未定義の動作が発生します)。

于 2010-06-17T10:19:55.800 に答える
1
#ifndef GAMEVIEW_H_
#define GAMEVIEW_H_

#include <SDL/SDL.h>

class GameView
{
public:
 GameView() {}
 virtual ~GameView() {}

 virtual void Update() = 0;
 virtual void Render(SDL_Surface* buffer) = 0;
};

#endif /* GAMEVIEW_H_ */
于 2010-06-17T10:19:36.440 に答える
1

私はあなたの問題を見ていません:

class GameView
{
public:
 GameView() {}
 virtual ~GameView() {}

 virtual void Update() = 0;
 virtual void Render(SDL_Surface* buffer) = 0;
};

そしてもちろん、コンストラクターが何もしない場合は、すべてを提供する必要はありません。

于 2010-06-17T10:19:36.623 に答える