【发布时间】:2020-11-01 00:43:41
【问题描述】:
我不知道我的标题是否用正确的术语表达,如果不是,请纠正我,以便我更新它。然而,这是我用代码示例表达的问题:当涉及到 keyStates 变量时,示例 A 和 B 之间有什么区别?
示例A(其中“keyStates”变量在.h文件的类中定义为静态变量):
// Input.h
class Input
{
public:
static bool GetKeyDown(KeyCode keycode);
private:
static std::unordered_map<KeyCode, KeyState> keyStates;
}
// Input.cpp
#include "Input.h"
bool Input::GetKeyPressed(KeyCode keyCode)
{
for (auto Code : AllKeyCodes)
{
if (Code == keyCode)
{
return KeyState::PRESSED == keyStates.find(Code)->second;
}
}
return false;
}
示例 B(其中“keyStates”变量在 .cpp 文件中没有静态定义):
// Input.h
class Input
{
public:
static bool GetKeyDown(KeyCode keycode);
}
// Input.cpp
#include "Input.h"
std::unordered_map<KeyCode, KeyState> keyStates;
bool Input::GetKeyPressed(KeyCode keyCode)
{
for (auto Code : AllKeyCodes)
{
if (Code == keyCode)
{
return KeyState::PRESSED == keys.find(Code)->second;
}
}
return false;
}
【问题讨论】:
-
现在,试着把你的类变成一个巨大的类,有数百个方法,这样在一个
.cpp文件中定义它们的所有方法是不切实际的,你必须把它分成几个.考虑到这一点,请尝试重新阅读您的问题,看看您是否能自己发现差异。 -
主要区别在于
keyStates变量对其余代码的可见性。 -
Static = 类名称空间内的全局。
-
另外,第一个示例中的
private关键字也很重要。