函数指针指向多个函数

转载于:HTTPS://blog.csdn.net/wenpinglaoyao/article/details/79154086

为了简化,关于类的名称就叫甲吧,先定义一个类的头文件,如下所示:

#include <iostream>
using namespace std;
A类
{
public:
    A(int n);
    〜A();
 
    / *就是下面我们的类函数指针的声明
    首先,众所周知函数指针的声明前面要用圆括号括起来
    而类函数指针在前面还要加一个类名与域操作符【 ::】,
    表示这种函数指针只能指向这个类中的某些函数;
    中括号和3表示这是一个函数指针数组,最后那个圆括号
    表示参数列表,要和被指向的函数参数列表一致才行* /
    void(A: :* pfun [3])();
 
    void show(int i); //之所以加上这个函数,是为了展示【 - > *】的用法
私有:
    void fun1(); //第一个函数指数要指向的函数;
    void fun2(); //同上,是第二个
    void fun3(); //第三个
};


然后是我们的CPP文件定义:

#include“啊”
 
A :: A()
{
    / *类函数指针的赋值要严格如下所示前面
    的【&】与类域操作符都是必不可少的* /
    pfun [0] =&A :: FUN1;
    pfun [1] =&A :: fun2;
    pfun [2] =&A :: fun3;
 
    / *下面这个就是非法的* /
    // pfun [2] = A ::&fun3;
}
 
void A :: show(int i)
{
    if(i <3)
        (this - > * pfun [i])(); //这里必须要加上这个,因为【 - > *】是一个操作符,前面必须要有对象
}
 
void A :: fun1()
{
    cout <<“fun1:hello world!” << endl;
}
void A :: fun2()
{
    cout <<“fun2:我是小彪。” << endl;
}
void A :: fun3()
{
    cout <<“fun3:谢谢你的阅读!”<< endl;




      最后是我们的源文件定义:
#include“啊”
int main()
{
    A a;
    for(int i = 0; i <3; i ++)//这个是错误的使用方式,编译器不会报错
        a.pfun [i];
    cout <<“上面显示内容了吗?没有吧,这是因为我们使用了错误的方式,下面的才是正解!”<< endl;
    for(int i = 0; i <3; i ++)//这个才是正确的使用方式
        (a。*(a.pfun [i]))();
 
    a.show(2);
    返回0;
}
      其中在源文件中,注意看第9行代码,那个【。*】实际上是一个操作符,它俩的出现意味着要调用类函数指针了(您可以试着在它俩中间加一个空格什么的,相信编译器会报错);而且这行出现了两个一,第一个一个是配合使用的调用对象,而后面那个一个意思是使用这个对象里面的函数指针值【 *。】;也许我说的有点晕,如果读者朋友有心,可以创建两个甲对象X和Y,然后让X和ý的函数指针数组里面的值不一样,比如X里面的pfun [0]指向的是FUN1函数,而y里面的pfun [0]指向的却是fun3函数,然后用这样的代码
(x。*(y.pfun [i]))();
 

猜你喜欢

转载自blog.csdn.net/weixin_41265887/article/details/84937312
今日推荐