C ++:避免​​使用只有空(de)构造函数的.cpp文件

时间:2010-06-17 10:16:55

标签: c++ header-files code-structure

当我有这样的头文件时:

#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 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:4)

  

我想在头文件中简单地实现该方法。那更清洁了。

就这样吧。

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

你甚至不需要写这个。编译器本身提供默认构造函数。你唯一需要的是析构函数,因为默认情况下它不是虚拟的。

如果您听说需要在.cpp文件中定义这些内容 - 如果您的班级中有智能指针作为成员,则有时需要这样做。一个经验法则是,当你在类中有智能指针,并且它们指向一个只是在标题中向前声明的类时,总是在实际定义指向类的.cpp文件中提供构造函数和析构函数。否则,您可能会遇到删除不完整类的问题(在许多情况下会导致未定义的行为)。

答案 2 :(得分: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_ */

答案 3 :(得分:1)

我没有看到你的问题:

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

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

当然,如果构造函数什么都不做,则无需提供所有内容。