C ++:从非类函数调用类方法

时间:2013-04-26 08:48:56

标签: c++

我想编写一个调用类方法的帮助函数:

foo.h中

class cls{
  public:
  void fun();
  void fun1();
};

Foo.cpp中

void cls::fun(){
  helperFun();
}

void helperFun(){
  fun1();//how to call fun1() here?
}

我该怎么做,或者最好的方法是什么?

5 个答案:

答案 0 :(得分:6)

要调用cls的方法,您需要有一个cls实例。 fun可以访问this,并可以使用该helperFun提供该实例:

void cls::fun(){
  helperFun(*this);
}

// If fun1() was const, the parameter could be a const cls&
void helperFun(cls& arg){
  arg.fun1();
}

这只是一种(非常直接)安排事物的方式,一般来说有更多的选择,挑选最好取决于你想要做的事情。

答案 1 :(得分:4)

它需要调用类的实例。也许您希望实例与调用fun的实例相同。在这种情况下,您可以将*this传递给helperFun

void cls::fun(){
  helperFun(*this);
}

void helperFun(cls& obj){
  obj.fun1();
}

答案 2 :(得分:1)

将辅助函数作为参数传递给fun1:

void cls::fun(){
  helperFun(this); //currently passing as this pointer
}

void helperFun(cls* obj){
  obj->fun1();
}

答案 3 :(得分:1)

非静态类方法(例如fun)始终在其类的实例上调用。你需要一个cls实例来调用fun。您可以通过以下方式之一获取该实例:

  • cls的正文中创建fun对象。
  • 通过将cls对象(或对它的引用或指向它的指针)作为参数传递给fun(包括更改fun的签名。)
  • 通过创建cls类型的全局变量(我强烈反对此选项)。

或者,fun可能被声明为静态,前提是它不使用cls类的任何字段。在这种情况下,您可以使用以下指令调用它而不使用关联的cls实例:cls::fun()

答案 4 :(得分:0)

如果你需要一个从类的一个方法调用的辅助函数,然后它需要调用同一个类的另一个方法,为什么不让它成为类的成员?我的意思是,它不能是一个独立的方法,它与你的班级紧密结合。所以它必须属于IMO类。