在其他类的构造函数中使用类的函数

时间:2015-09-19 07:21:43

标签: c++

我有两个类,其中一个(类ode)有一个私有成员,它是一个函数(指向函数的指针):

class ode 
{
private:
    double T;
    double (*sfn)(double,double,double*);//I mean this
    int Ne;

public:
    ode(double t,double (*f)(double,double,double*),int N)
    {
        Ne=N;
        T=t;
        sfn=f;
    } //.....
}

现在我想构建一个ode对象,在它的构造中,函数(sfn)应该从另一个类获取!!如果我想使用一个超出任何类的函数,我应该只在构造函数中写出该函数的名称。但这种情况是不同的。 我能做什么??我怎么能构造这个对象??

1 个答案:

答案 0 :(得分:0)

能够调用成员函数需要指向类的指针。

class X {
   ...
   double fn( double,double,double*);
};

为了能够获得指向成员的指针,你需要一个这样的想法。

X * pMember; // hold instance we want to call.
typedef double (X::*funcPointer)( double, double, double * );
funcPointer fPtr = X::fn;

然后最终可以用

调用
(pMember->*fPtr)( v1,v2,&v3);

在所有情况下,都需要知道X类。

使用此模式的原因是,当存在多个共享签名的函数时,这些函数由于不同的原因而被使用。 UI系统(MFC,wxWidgets)使用此技术将窗口事件绑定到处理函数。

或者,使用多重继承,其中函数定义良好,但实现的实现方式不同。

 class base {
      virtual double func( double, double, double * ) = 0;
 };
 class X1 : public base {
     double func( double, double, double * )
     {
        // implementation.
     }
 };

 class X2 : public base {
     double func( double, double, double * )
     {
        // implementation.
     }
 };

每个实现X1,X2,...提供适合虚拟绑定的已更改行为。

这只需要一个成员基础;

 base * pBase;
 pBase->func( v1, v2, &v3);