我已经使用这种代码风格有一段时间了,我通常会创建一个前面有“ID”的类,将它放在标题中,然后创建一个 .cpp 文件并放置一个名为“IDClassnameLocal”的类。我在抽象头类中创建纯虚函数,然后在 .cpp 类中创建普通虚函数并让它继承抽象头类。
这是糟糕的代码设计吗?我编码效率高吗?
- 我将 ID(identification) 放在类名前面,以防止重新定义和清洁。
例子:
// Player.h // ////////////////////////////////////////////////////////////////
class IDPlayer {
public:
virtual ~IDPlayer(void) {} // Destructor
virtual void PlayerData(void) = 0;
virtual void Controls(void) = 0;
};
extern IDPlayer* idplayer;
// Player.cpp // //////////////////////////////////////////////////////////////
class IDPlayerLocal : public IDPlayer {
public:
IDPlayer(void) {} // Constructor
virtual void PlayerData(void);
virtual void Controls(void);
};
IDPlayerLocal idplayerLocal;
IDPlayer* idplayer = &idplayerLocal;
// Class Function Definitions
void IDPlayerLocal::PlayerData(void) {
Player.X = 400;
Player.Y = 500;
Player.W = 20;
Player.H = 20;
Player.VelocityX = (float)0.31;
Player.VelocityY = (float)0.31;
}
void IDPlayerLocal::Controls(void) {
if(::MainGame) {
if(KEY_DOWN(0x41)) { // A
Player.X = Player.X - Player.VelocityX;
if(Player.X <= 0)
Player.X = 0;
}
if(KEY_DOWN(0x44)) { // D
Player.X = Player.X + Player.VelocityX;
if(Player.X+Player.W >= 650)
Player.X = 650 - Player.W;
}
if(KEY_DOWN(0x57)) { // W
Player.Y = Player.Y - Player.VelocityY;
if(Player.Y <= 0)
Player.Y = 0;
}
if(KEY_DOWN(0x53)) { // S
Player.Y = Player.Y + Player.VelocityY;
if(Player.Y+Player.H >= 570)
Player.Y = 570 - Player.H;
}
if(KEY_DOWN(VK_SPACE)) {
}
}
}
// Core.cpp // ////////////////////////////////////////////////////////////////
// ...
// Intialized Data //
idplayer->PlayerData();
while(TRUE) {
// ...
// Loop Data //
idplayer->Controls();
// ...
}
// ...