如何从方法访问类成员
How to access class members from a method?
我想从eventReceiver对象内部访问引擎。他们是游戏班的同学,但我该怎么做到呢?
// game.h
class game
{
public:
game();
3dEngine* engine;
eventReceiver* receiver;
};
// eventReceiver.h
class eventReceiver
{
public:
eventReceiver () {}
virtual bool OnEvent (const SEvent& event)
{
...
case QUIT_BUTTON_PRESSED:
>>> engine->quit(); // how to access engine from here??
return true;
...
}
};
我应该用"this"吗?我不明白为什么接收器看不到发动机。
将类实现为Singleton,并为engine
属性编写getter。访问代码可能看起来像:
game::getInstance()->getEngine()->quit();
不过,我建议您在游戏类本身中创建一个quite()
方法,隐藏实现细节,并允许您处理整个应用程序的关闭,而不仅仅是3dEngine
:
game::getInstance()->quit();
如果您不想将game
类实现为singleton,您还可以将game
对象的引用/指针传递给事件处理程序的构造函数:
class CloseButtonHandler : public eventHandler {
game& game;
public:
CloseButtonHandler(game& game) : game(game) {
}
virtual bool OnEvent(const SEvent& event){
...
game.getEngine()->quit();
}
}
eventReceiver不应该知道任何关于引擎的信息。这是个糟糕的设计。有几个解决方案。一个合理的解决方案是从eventReceiver
导出game
,因为game
可以清楚地接收事件。然后,您可以在game
本身中实现特定于游戏的OnEvent
处理程序。从那里您可以拨打engine->quit
。
我不知道这个设计有多优雅,但它很管用。
我只是将接收器从game类中分离出来,并给它的构造函数一个指向myGame实例的指针。(感谢Paranaix)
class eventReceiver {
public:
eventReceiver (game* gameInstance) : gamei(gameInstance)
virtual bool OnEvent (...)
{...
case QUIT_BUTTON_PRESSED:
gamei.engine->quitGame();
...}
private:
game* gamei;
}
int main() {
game myGame;
eventReceiver receiver (&myGame);
}
相关文章:
- 这是关于成员访问规则的正确摘要吗
- 为什么我在空指针错误(链表)中获取成员访问权限
- 成员访问是否在空指针上定义C++?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- 为什么c++允许成员函数定义中实例的私有成员访问
- C/C++ 包含点的宏参数(成员访问运算符)
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 内部类私有成员访问和封闭的友好性
- 通过 C++ 中的另一个结构成员访问结构
- 具体化 PRVALUES 成员访问的 decltype 行为不正确
- 常量表达式中的静态成员访问
- XVALUE来自类成员访问表达式
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 如何访问模板参数的成员?“成员访问不完整的类型”
- 不明确的可变参数类成员访问
- C 受保护的成员访问
- 将typeID转换为静态成员访问(C )的命名空间