• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++的类成员和类成员函数指针

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

类成员函数指针

用于访问类成员函数,和一般函数指针有区别。

类成员函数处理的是类数据成员,声明类成员函数指针的同时,还要指出具体是哪个类的函数指针才可以。调用时也要通过对象调用

而对于类的静态成员函数,它是类对象共享的,且只能处理静态数据成员,所以它的函数指针可以类似一般函数指针一样使用。

 

 1 class Test
 2 {
 3 public:
 4     void fun(int);
 5     void fun(int) const;    //重载函数,加一个const限制
 6     static void fun_static(int);
 7 
 8     int m_data;
 9 };
10 
11 void Test::fun(int i)
12 {
13     cout << "fun " << i << endl;
14 }
15 
16 void Test::fun(int i) const
17 {
18     cout << "const fun " << i << endl;
19 }
20 
21 void Test::fun_static(int i)
22 {
23     cout << "static " << i << endl;
24 }
25 
26 int main()
27 {
28     void (Test::*pfun)(int)               = &Test::fun;        //成员函数指针,要加类域作用符,且等号右边要加&取函数地址(理解为取类成员地址)  
29     void (Test::*pfunConst)(int) const    = &Test::fun;        //同上,const版本成员函数的指针
30     void (*pfunStatic)(int)               = &Test::fun_static; //静态成员函数的指针,不用加域作用符,等号右边也可以不加&符号。和普通函数指针使用方式相同
31     int  (Test::*pi) = &Test::m_data;    //类数据成员指针
32 
33     Test a;
34     const Test b;  //注意!gcc编译时报错,提示定义const变量需要显示定义构造函数;VS编译时警告,编译器生成的默认构造函数初始化的“const”自动数据产生不可靠的结果
35 
36     a.*pi = 3;
37     //b.*pi = 4;   //const对象不能修改数据成员
38 
39     a.fun(3);   //输出 fun 3
40     b.fun(3);   //输出 const fun 3,const对象只能调用const成员函数
41 
42     (a.*pfun)(3);       //通过对象调用成员函数指针,输出 fun 3
43     (a.*pfunConst)(3);  //通过普通对象调用const版本的函数, 输出 const fun 3
44     
45     //(b.*pfun)(3);     //const对象不能调用普通函数
46     (b.*pfunConst)(3);  //输出const fun 3
47 
48     pfunStatic(3);         //输出static fun 3,静态成员函数指针,可直接调用
49     Test::fun_static(3);   //同上
50 
51     return 0;
52 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#基础(五)——类中私有构造函数作用发布时间:2022-07-13
下一篇:
C#排列组合类发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap