c++调用外部类函数

c++ call outside class functions

本文关键字:类函数 外部 调用 c++      更新时间:2023-10-16

是否有一种方法可以让内部类直接调用外部类函数?而不是检查布尔值是否为真。

:

内部类

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

}

如果Inside::Update函数没有对Outside对象的引用,则不可能这样做。

最简单的解决方案是通过this作为参数调用Update:

class Inside
{
    ...
    void Update(Outside* outside)
    {
        outside->LoadGame();
    }
};
// ...
void Outside::Update()
{
    inside->Update(this);
}

另一个解决方案是在Outside类中创建inside对象时将this作为参数传递给构造函数。


然而,这两个类非常紧密地耦合在一起,这可能是糟糕设计的标志。在实现它之前,您应该问自己"我真的需要这种紧密耦合吗?"是否有其他方法可以通过更好的设计来解决这个问题?是什么是我想要解决的问题?"

如果你想访问一个静态方法:

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

file Inside.h v1

#include "Outside.h"
class Inside {
public:
   void update() { o.startGame(); }
private:
   Outside o;
}

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