C++中的成员指针(pointer-to-member)
2012-08-16 23:24
253 查看
今天在看《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;
}
注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
转载网址:/article/11474295.html
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;
}
注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
转载网址:/article/11474295.html
相关文章推荐
- C++ 成员函数指针的问题 pointer-to-member-function
- C++中的成员指针(pointer-to-member)
- C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)
- 成员指针(pointer-to-member)
- Thinkcpp学习笔记 c11 成员指针 Pointer to member
- C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)
- Function Pointer of class member function (类的成员函数指针)
- Function Pointer of class member function C++的类成员函数指针简要
- 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 (类的成员函数指针)
- C++对象模型——指向Data Members的指针(Pointer to Data Members)(第三章)
- C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别
- Thinking in C++: Pointers to members 指向成员的指针
- 15.含有指针成员的类的拷贝[ClassCopyConstructorWithPointerMember]
- how to initialize Static data member in C++ (怎样初始化类的static数据成员)
- C++ - "动态内存成员" 的 类设计 (值和指针)
- 成员函数指针与高效C++委托 (delegate)
- C++的静态成员函数指针