c ++调用外部类函数

时间:2014-07-09 14:47:07

标签: c++ class call

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();
   }


}

2 个答案:

答案 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);
   }
}