函数指针和类成员指针经常被用作参数进行传递,多态和函数重载都会用到.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| #include <iostream>
#include <string>
#include <string.h>
using namespace std;
class Demo {
public:
void show() {
cout << "member method Demo::show() did call" << endl;
str = "str from Demo::show()";
}
string str;
};
void show() {
cout<<"普通函数指针被调用"<<endl;
}
int main(int argc, char* argv[]) {
//普通函数指针
//将普通函数show的地址赋值给pPainShow,优先级原因,必须在(*pPainShow)外加小括号,
//否则编译器会将此认为是一个void* pPainShow(); 的函数声明,显然,我们不是这个意思.^_^
void (*pPainShow)() = &show;
(*pPainShow)();
//指向类成员变量的指针
//将Demo::str的地址赋值给 pStr指针
string Demo::*pStr = &Demo::str;
//指向类成员方法的指针
//将Demo::show的地址赋值给pShow,此处因为优先级问题,必须在Demo::*pShow外加小括号.
void (Demo::*pShow)(/*参数列表...*/)=&Demo::show;
Demo *d=new Demo;
Demo dd;
cout<<"准备通过指向成员函数的指针调用函数"<<endl;
(d->*pShow)();
(dd.*pShow)();
cout<<"准备通过指向成员变量的指针访问变量"<<endl;
cout<<d->*pStr<<endl;
cout<<dd.*pStr<<endl;
}
|