当我有这样的头文件时:
#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文件。 我想在头文件中简单地实现该方法。那更清洁了。
怎么做?
答案 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;
};
当然,如果构造函数什么都不做,则无需提供所有内容。