Inside类是否有办法直接调用Outside类函数? 而不必检查布尔值是否为真。
像这样:
内部课程
class Inside {
public:
Inside()
{
}
~Inside()
{
}
Update()
{
if(buttonpress)
{
//call Outside::LoadGame();
}
}
}
外部课程
class Outside {
public:
Outside();
~Outside();
void LoadGame()
{
//Load Game
}
Inside* insideObject;
void Update()
{
insideObject->Update();
}
}
答案 0 :(得分:1)
您无法做到这一点,而不是Inside::Update
函数没有引用Outside
对象。
最简单的解决方案是将Update
作为参数调用this
:
class Inside
{
...
void Update(Outside* outside)
{
outside->LoadGame();
}
};
// ...
void Outside::Update()
{
inside->Update(this);
}
另一种解决方案是在this
类中创建inside
对象时将Outside
作为参数传递给构造函数。
然而,这非常紧密地联系了两个班级,这可能是糟糕设计的标志。在实现这个之前,你应该问自己"我真的需要这种紧密耦合吗?有没有其他方法可以通过更好的设计解决问题? 是我试图解决的问题是什么?"
答案 1 :(得分:0)
如果您想访问静态方法:
档案Outside.h
class Outside {
public:
static void startGame();
}
档案Inside.h
#include "Outside.h"
class Inside {
public:
void update() { Outside::startGame(); }
}
相反,如果您想访问特定实例,则需要:
档案Outside.h
class Outside {
public:
void startGame();
}
档案Inside.h v1
#include "Outside.h"
class Inside {
public:
void update() { o.startGame(); }
private:
Outside o;
}
档案Inside.h v2
#include "Outside.h"
class Inside {
public:
void update(const Outside& o) { o.startGame(); }
}
您的具体案例:
class Inside {
public:
Inside() { }
~Inside(){ }
Update(Outside* o) {
if(buttonpress) {
o->LoadGame();
}
}
}
class Outside {
public:
Outside();
~Outside();
void LoadGame() { }
Inside* insideObject;
void Update() {
insideObject->Update(this);
}
}