C++中的成员指针(pointer-to-member)
2009-04-23 17:33
399 查看
今天在看《STL源码剖析》的函数适配器那一章节的时候,看到出现这种语法(p->*f)(),以前从来没注意到->*的用法,于是查了一些资料。
C++中->*运算符主要是结合成员指针(pointer-to-member)进行使用,所谓的成员指针是指向类成员变量或者成员函数的指针。注意这里说类,并没有说对象。这是是因为实际上它仅仅是一个偏移量,并与任何对象都没有关系。
指向成员指针的例子如下:
注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
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; }
注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
相关文章推荐
- C++ 成员函数指针的问题 pointer-to-member-function
- C++中的成员指针(pointer-to-member)
- Thinkcpp学习笔记 c11 成员指针 Pointer to member
- 成员指针(pointer-to-member)
- C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)
- C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)
- Thinking in C++: Pointers to members 指向成员的指针
- C++对象模型——指向Data Members的指针(Pointer to Data Members)(第三章)
- Function Pointer of class member function (类的成员函数指针)
- how to initialize Static data member in C++ (怎样初始化类的static数据成员)
- C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别
- Function Pointer of class member function C++的类成员函数指针简要
- 15.含有指针成员的类的拷贝[ClassCopyConstructorWithPointerMember]
- Member Function Pointers and the Fastest Possible C++ Delegates - 成员函数指针与高性能的C++委托
- Thinking in C++: Pointers to members 指向成员的指针
- C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别
- Function Pointer of class member function (类的成员函数指针)
- Android NDK编译C++ 'stoi' and 'to_string' is not a member of 'std'
- c++ 全局的指针变量 和 成员指针变量 初始化
- C++带有指针成员的类处理方式详解