C++的类成员函数指针

例:

class test1;

class test;

typedef char (test::*PT)();

typedef int (test1::*PT1)();

class test1

{

public:

   int R_1(){return 1;}

   int R_2(){return 2;}

};

 

enum TR{R_a,R_b};

enum T1R{R_1,R_2};

test1 test_1;

 

class test

{

public:

//typedef char (test::*PT)();

//typedef int (test1::*PT1)();

   void t_main(TR t,T1R t1){

     PT pt[2]={&test::R_a, &test::R_b};

     PT1 pt1[2]={&test1::R_1, &test1::R_2};

     Show(pt[t],pt1[t1]);

   }

   void Show(PT pt,PT1 pt1){

     cout<<(this->*pt)()<<"\n"<<(test_1.*pt1)();

   }

   char R_a(){return 'a';}

   char R_b(){return 'b';}

 

};

void main()

{

   test t;

   t.t_main(R_a,R_2);

   getch();

}

 

上面代码定义了2个class:test和test1,其中定义了2个类成员函数指针类型:

typedef char (test::*PT)();

typedef int (test1::*PT1)();

因为是在这2个类之前定义的成员函数指针类型,所以要在他前面加上这2个类的声明:

class test;

class test1;

例子中的这2个成员函数指针类型也可以定义在test类中; 我们来看看这2个成员函数指针类型定义的关键 (test::*PT) 这里的test::限定了PT所在的类,而一般的函数指针只需要(*PT)这样定义就可以了。

PT pt[2]={&test::R_a, &test::R_b};

PT1 pt1[2]={&test1::R_1, &test1::R_2};

定义了指向成员函数的指针表。     

enum TR{R_a,R_b};

enum T1R{R_1,R_2};

TR,T1R是一个枚举类型,它提供了一组索引。

下面是另一个关键:

(this->*pt)() 和 (test_1.*pt1)();

类成员的指针必须总是通过特定的对象或指向该类类型的对象的指针来访问。我们通过使用两个指向

成员操作符的指针(针对类对象和引用的.*,以及针对指向类对象的指针的->*)来做到这一点。

因为pt指向的是test类中的成员函数,所以使用this指针来确定pt指向的成员函数所在的类,

而pt1指向的是test1类中的成员函数,所以要先定义一个test1对象(test_1)来确定pt指向的成员函数所在的类。

转载于:https://www.cnblogs.com/window07/archive/2007/01/03/610737.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值