免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1468 | 回复: 4
打印 上一主题 下一主题

[函数] 请教成员函数指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-22 20:03 |只看该作者 |倒序浏览
我明明以在类中定义了成员函数指针,可编译时出错,提示pH不存在?帮忙给我指出错误,谢谢.
#include <iostream>
using namespace std;
class Plot{
      public:
            
             void (Plot::*pH)();
      publiclot(){pH=&lot::hello;}
      private:
              void hello()
              {cout<<"call private function"<<endl;
              }
};                    
int main()
{ Plot obj;
  (obj.*pH)();
}

论坛徽章:
0
2 [报告]
发表于 2007-03-22 20:07 |只看该作者
哦,原码是这样的.
#include <iostream>
using namespace std;
class Plot{
      public:
            
             void (Plot::*pH)();
      public:
             Plot()
             {pH=&Plot::
                        hello;}
      private:
              void hello()
              {cout<<"call private function"<<endl;
              }
};                    
int main()
{ Plot obj;
  (obj.*pH)();
}

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
3 [报告]
发表于 2007-03-22 21:32 |只看该作者

回复 2楼 beginer1 的帖子


  1. #include <iostream>
  2. using namespace std;
  3. class Plot
  4. {
  5.       public:            
  6.              typedef void (Plot::*pH)();
  7.              pH  ph;
  8.       public:
  9.              Plot(){ph=&Plot::hello;}
  10.       private:
  11.              void hello()
  12.              {
  13.                       cout<<"call private function"<<endl;
  14.              }
  15. };                    

  16. int main()
  17. {
  18.         Plot obj;
  19.         (obj.*(obj.ph))();
  20. }

复制代码


不过用指针调用私有函数破坏了对象的封装。

论坛徽章:
0
4 [报告]
发表于 2007-03-23 14:02 |只看该作者
呵呵,zhujiang73你好厉害呀! 看川了我的意图,我就是要用成员函数指针破坏对象的封装,用成员指针访问私有函数!!
你的代码编译通过了,可我的好象也没错怎么就不行?

论坛徽章:
0
5 [报告]
发表于 2007-03-23 14:19 |只看该作者
呵呵,在你的代码提示下,终于找到错误了,我的代码编译通过了,原码如下:

#include <iostream>
using namespace std;
class Plot{
      public:
            
             void (Plot::*pH)();
      public:
             Plot()
             {pH=&Plot::
                                hello;}
      private:
              void hello()
              {cout<<"call private function"<<endl;
              }
};                    
int main()
{ Plot obj;
  (obj.*(obj.pH))();
  cin.get();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP