当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

C/C++指针相关应用

        C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。

          刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的。本文引导你了解成员函数指针的声明,赋值和调用回叫函数。


        C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。

          刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的。本文引导你了解成员函数指针的声明,赋值和调用回叫函数。

          成员函数指针的声明

          一个成员函数指针包括成员函数的返回类型,后随::操作符类名,指针名和函数的参数。初看上去,语法有点复杂。其实可以把它理解为一个指向原函数的指针,格式是:函数返回类型,类名,::操作符,指针星号,指针名,函数参数。

          一个指向外部函数的指针声明为:

          void (*pf)(char *, const char *);

          void strcpy(char * dest, const char * source);

          pf=strcpy;

          一个指向类A成员函数的指针声明为:

          void (A::*pmf)(char *, const char *);

          声明的解释是:pmf是一个指向A成员函数的指针,返回无类型值,函数带有二个参数,参数的类型分别是char * 和 const char *。除了在星号前增加A:: ,与声明外部函数指针的方法一样。

          赋值

          给成员指针赋值的方法是将函数名通过指针符号&赋予指针名。如下所示:

          class A

          {

          public:

           void strcpy(char *, const char *);

           void strcat(char *, const char *);

          };

          pmf = &A::strcpy;

          有些老的编译器可以通过没有&号的赋值方式,但标准C++强制要求加上&号。

          使用类型定义

          可以用类型定义来隐藏复杂的成员指针语法。例如,下面的语句定义了PMA是一个指向A成员函数的指针,函数返回无类型值,函数参数类型为char * 和 const char *:

          typedef void(A::*PMA)(char *, const char *);

          PMA pmf= &A::strcat; // pmf是PMF类型(类A成员指针)的变量

          下文会看到使用类型定义特别有利于声明成员指针数组。

          通过成员指针调用成员函数

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接