普通函数指针与成员函数指针

普通函数的指针:指向普通的函数,如果要指向类的成员函数,则该成员函数必须是静态的;

void (*pFUN)(int ,char  *);

在这里为了定义的方便和简化表达式,强烈建议定义用typedef;

typedef void(*pFUN)(int ,char *);

pFUN fun1;

void show(int a,char *p){}

static void show(int a,char *p)({}

fun1=show;  或者是 fun1=&show;// OK

//C/C++的函数名称可以退化到对应的函数指针;

(*fun1)(2,"hello"); //函数的调用;


成员函数指针:成员函数的调用一定是类对象的调用;

在这里有几个特殊的操作符:

(::*)    (->*)    (.*)

typedef void (ClassName::*pFUN)(int, char *);

class ClassName

{

public:

void show(int a,char *p)

{

}

};


ClassName aa;

ClassName *bb=new ClassName;

pFUN fun1;

fun1=&ClassName::show;  //此处一定要加&

//但是成员函数指针不能隐式退化;

(aa.*fun1)();  //实例对象调用成员函数;

(bb->*fun1)();//指针对象调用成员函数;

值得注意的是:成员函数指针不能指向静态成员函数;经过编译发现取静态函数地址的时候会出错;


类中的常函数指针也的有const修饰;

typedef void (ClassName::*pFUN)(int, char *) const;

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值