您的位置:首页 > 编程语言 > C语言/C++

C++中的成员指针(pointer-to-member)

2009-04-23 17:33 399 查看
今天在看《STL源码剖析》的函数适配器那一章节的时候,看到出现这种语法(p->*f)(),以前从来没注意到->*的用法,于是查了一些资料。

C++中->*运算符主要是结合成员指针(pointer-to-member)进行使用,所谓的成员指针是指向类成员变量或者成员函数的指针。注意这里说类,并没有说对象。这是是因为实际上它仅仅是一个偏移量,并与任何对象都没有关系。

指向成员指针的例子如下:

#include <iostream>

using namespace std;

class Data {
public:
int a,b,c;
void printf() {
cout << a << " " << b << endl;
}
};

int main() {
Data d;
Data * pd = &d;
// 声明一个指向Data类中a成员的一个指向成员变量的指针
int Data::*mem = &Data::a;
// 有两种取得指针指向内容的方法,这是第一种:通过对象的指针访问
pd->*mem = 4;
mem = &Data::b;
// 第二种访问方式
d.*mem = 10;

// 以我们熟悉的方式调用函数
pd->printf();

// 声明一个指向Data::print()的一个成员函数指针
void (Data::*ptr)();
ptr = &Data::printf;

// 同样有两种调用方式
(pd->*ptr)();
(d.*ptr)();

return 0;
}


注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: