面试题答案
一键面试#include <iostream>
// 定义状态标志位
enum class CharacterState : unsigned char {
Invisible = 1 << 0,
Running = 1 << 1,
HasWeapon = 1 << 2
};
class Character {
private:
unsigned char stateFlags;
public:
Character() : stateFlags(0) {}
// 设置状态
void setState(CharacterState state) {
stateFlags |= static_cast<unsigned char>(state);
}
// 清除状态
void clearState(CharacterState state) {
stateFlags &= ~static_cast<unsigned char>(state);
}
// 检查状态是否存在
bool checkState(CharacterState state) const {
return (stateFlags & static_cast<unsigned char>(state)) != 0;
}
};
你可以使用以下方式调用这些函数:
int main() {
Character character;
// 设置状态
character.setState(CharacterState::Invisible);
character.setState(CharacterState::Running);
// 检查状态
std::cout << "Is invisible: " << (character.checkState(CharacterState::Invisible)? "Yes" : "No") << std::endl;
std::cout << "Is running: " << (character.checkState(CharacterState::Running)? "Yes" : "No") << std::endl;
std::cout << "Has weapon: " << (character.checkState(CharacterState::HasWeapon)? "Yes" : "No") << std::endl;
// 清除状态
character.clearState(CharacterState::Running);
// 再次检查状态
std::cout << "Is running: " << (character.checkState(CharacterState::Running)? "Yes" : "No") << std::endl;
return 0;
}
- 状态标志位定义:使用
enum class
定义不同的状态标志位,每个标志位对应一个唯一的位。 Character
类:- 包含一个
unsigned char
类型的成员变量stateFlags
,用于存储角色的状态。 setState
函数使用按位或(|
)操作设置特定状态。clearState
函数使用按位与(&
)和按位取反(~
)操作清除特定状态。checkState
函数使用按位与(&
)操作检查特定状态是否存在。
- 包含一个
在main
函数中展示了如何使用这些函数来管理角色的状态。