类的成员变量偏移指针和成员函数指针 .
来源:互联网 发布:mac 无线连接显示器 编辑:程序博客网 时间:2024/05/16 12:02
1、类的成员变量的偏移指针
这是个特殊的指针
- class A
- {
- public:
- int x;
- int y;
- };
class A{public:int x;int y;};
&A::x和&A::y就表示类A的数据成员偏移指针。
int _tmain(int argc, _TCHAR* argv[])
{
printf("%p\n", &A::x);
printf("%p\n", &A::y);
}
输出:0和4
int A::*是一个类型,表示类A中的成员变量偏移指针,这个指针值类型为int型。
- int A::* p;
- p=&A::x;
int A::* p;p=&A::x;
语法为:<mem_type> <class_type>::*
表示为:某类的某个成员类型的偏移指针
&<class_type>::<mem_name> 为类成员的偏移指针值。
<对象>.*<偏移指针值>和 <对象指针>->*<偏移指针值>:表示为偏移指针应用到对象上后的数据成员的值。
- 例如:
- int A::* p1=&A::x;
- A a a.*p1=3;
- A* pA; pA->*p1=4;
- int memadd(const A& ca, int A::* a, int A::* b)
- {
- return ca.*a + ca.*b;
- }
- A a;
- int n = memadd(a, &A::x, &A::y);
例如:int A::* p1=&A::x; A a a.*p1=3; A* pA; pA->*p1=4;int memadd(const A& ca, int A::* a, int A::* b) { return ca.*a + ca.*b; } A a;int n = memadd(a, &A::x, &A::y);
成员变量偏移指针是一种特殊的指针,你无法给它赋予自定义数值。如果给它赋值为NULL,会自动设置为0xFFFFFFFF,如果设置为某个数值,编译无法通过。只能赋值为&A::x这样的编译期常量。
- int A::* p;
- p = NULL;
- p = &A::x;
- p = 0x4; //编译出错
int A::* p;p = NULL;p = &A::x;p = 0x4; //编译出错
2、类的成员函数指针
假设有类:
- class A
- {
- public:
- int x;
- int foo(int n)
- {
- return n;
- }
- };
class A{public:int x;int foo(int n){return n;}};
那么该类的成员函数foo的指针声明如下:
int (A::*)(int)
typedef int(A::* FuncType)(int);
使用方式如下:
- A a, *pA=&a;
- FuncType f = &A::foo;
- (a.*f)(3);
- (pA->*f)(3);
A a, *pA=&a;FuncType f = &A::foo;(a.*f)(3);(pA->*f)(3);
注意:(a.*f)和(pa->*f)别忘记两边的双括号,否则编译不通过。
- 类的成员变量偏移指针和成员函数指针
- 类的成员变量偏移指针和成员函数指针 .
- 成员函数指针和成员变量指针
- 类成员变量的函数指针
- 类的数据成员指针和成员函数指针
- C++成员变量指针和成员函数指针
- 函数指针以及成员函数指针_成员变量指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- 一般函数指针和类的成员函数指针
- Android框架浅析之锁屏(Keyguard)机制原理
- 地形Tile中纹理删除以及替换模块分析,所有源码转自Ogrese
- PGPU::数学基础教程 深入到gpu内部讲解
- USB3.0中的8/10b编码技术详细解释
- 英文日期缩写
- 类的成员变量偏移指针和成员函数指针 .
- 计算4个数的最大值
- shopex 二次开发实战:添加仓库模块
- 如何成都java工程师
- SSH 文件上传错误:encountered 1 errors during the transfer解决方法
- nodejs - mysql操作示例
- 我的第五个C++上机报告(求两个数的正差值)
- struts2.2.3 配置中文乱码拦截过滤器
- Mac OS X 背后的故事(八)半导体的丰收