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

您可以内联定义构造函数和析构函数(这是正确的术语,使用 this 而不是deconstructor):

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 回答