C++类的成员函数指针与普通的函数指针用法

来源:互联网 发布:js push shift 编辑:程序博客网 时间:2024/04/30 04:30

1.类成员函数指针调用

          注意:如果在类内调用,则函数指针声明要放在类里面.如果是类外调用,则函数指针声明放在调用类中.

CFunCall.h文件:

class CFunCall
{
    typedef int (CFunCall::*CLASSFUNC)(int);
public:
    explicit CFunCall();
    ~CFunCall();
    void ClassPrint(int );
private:
    CLASSFUNC mCfun;
};

CFunCall.cpp

CFunCall::CFunCall()

{
   
    mCfun=&CFunCall::ClassPrint;  
    (this->*mCfun)(1);//类内直接调用,需要指定当前类的实例this.
}
 

 

////////////////////类外调用////////////

main.cpp

 

typedef int (CFunCall::*CLASSFUNC)(int);

int main(int argc, char *argv[])
{
  
 
    CFunCall   mCFunCall;//实例化类
    CLASSFUNC mCfun;
    mCfun=&CFunCall::ClassPrint;   //附值类的成员函数给定义的函数指针
    (mCFunCall.*mCfun)(1);    //调用,注意调用的形式,要有类的实例

2.普通函数指针调用

        这个比类函数指针更容易理解.直接上代码说明

.h文件

 

typedef int (*FunC)(int);    //声明函数指针,带一个int参数,和返回一个整形数

 

int Print(int);

class FunCall
{
 
public:
    FunCall();
    ~FunCall();
    
private:
    FunC      mFun;      //定义函数指针
};

 

在.cpp中实现一个打印函数

 

int  Print(intdata)         

{
    qDebug()<<"data"<<data;
    return 0;
}

/////////调用//////////////////////////

    mFun=&Print;  //将Print的函数地址给定义的函数指针.

    (*mFun)(1);  //调用
 
/////////////////////效果//////////////////
 

 

 

0 0
原创粉丝点击