C++成员函数指针的应用

发表于:2016-2-06 08:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:玄冬    来源:51Testing软件测试网采编

  高级使用技巧
  以上是成员函数的基本知识。现在介绍它的高级使用技巧。
  成员指针数组
  在下例,声明了一个含有二个成员指针的数组,并分配类的成员函数地址给成员指针:
  PMA pmf[2]= {&A::strcpy, &A::strcat};
  也就是
  void (A::*PMA[2])(char *, const char *)= {&A::strcpy, &A::strcat};
  这样的数组在菜单驱动应用中很有用。选择菜单项后,应用将调用相应的回叫函数,如下所示:
enum MENU_OPTIONS { COPY, CONCAT };
int main()
{
MENU_OPTIONS option; char str[4];
//从外部资源读取选项
switch (option)
{
case COPY:
(pa->*pmf[COPY])(str, “abc”);
break;
case CONCAT:
(pa->*pmf[CONCAT])(str, “abc”);
break;
//…
}
}
  Const 类型的成员函数
  成员指针的类型应该与成员函数类型一致。上面例子中的pmf 可以指向A的任意函数,只要该函数不是const类型。如下所示,如果将touppercase()的地址分配给pmf,将导致编译出错,因为touppercase() 的类型是const。
  Class A
  {
  public:
  void strpcy(char *, const char *);
  void strcat(char *, const char *);
  void touppercase(char *, const char*) const;
  };
  pmf=&A::touppercase; //出错,类型不匹配
  //解决的方法是声明一个const类型的成员指针:
  void (A::pcmf)(char *, const char *) const;
  pcmf=&A::touppercase; // 现在可以了
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号