繁体   English   中英

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

[英]C++: call class method from a non-class function

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

foo.h

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

foo.cpp

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

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

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

为了调用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();
}

这只是安排事情的一种(相当直接的)方式,通常有更多选择,而最佳选择则取决于您要尝试做的事情。

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

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

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

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

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

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

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

  • 通过在体内创建一个cls对象fun
  • 通过将cls对象(或对其的引用或指向它的指针)作为参数传递给fun(涉及更改fun的签名)。
  • 通过创建cls类型的全局变量(我强烈建议不要使用此选项)。

或者,只要不使用cls类的任何文件,就可以将fun声明为静态的。 在这种情况下,可以使用以下指令在没有关联的cls实例的情况下调用它: cls::fun()

如果需要一个从该类的一个方法调用的帮助程序函数,然后又需要调用该同一个类的另一个方法,为什么不将其设为该类的成员呢? 我的意思是,它不能是独立的方法,它与您的类紧密结合在一起。 因此,它必须属于IMO类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM