如何取类的非静态数据成员地址
2015-07-21 00:00
274 查看
摘要: 静态数据成员地址
要通过地址对类的非静态数据成员进行存取,需要将对象的起始地址加上非静态成员的偏移量得到成员的地址。例如:
最后一行对成员m_y的赋值就相当于通过如下方式取m_y的地址:
请注意其中的-1操作,指向数据成员的指针,其偏移量总是被加上1,这样可以使编译系统区分开"一个指向数据成员的指针,指向类的第一个成员"和"一个指向数据成员的指针,没有指向类的任何成员"。
每一个非静态成员变量的偏移量在编译时期确定,即使这个成员是通过单一继续或多重继承得到的。
要通过地址对类的非静态数据成员进行存取,需要将对象的起始地址加上非静态成员的偏移量得到成员的地址。例如:
class Point { public: int m_x; int m_y; }; Point origin; origin.m_y = 0;
最后一行对成员m_y的赋值就相当于通过如下方式取m_y的地址:
&origin + (&Point::m_y - 1);
请注意其中的-1操作,指向数据成员的指针,其偏移量总是被加上1,这样可以使编译系统区分开"一个指向数据成员的指针,指向类的第一个成员"和"一个指向数据成员的指针,没有指向类的任何成员"。
每一个非静态成员变量的偏移量在编译时期确定,即使这个成员是通过单一继续或多重继承得到的。
相关文章推荐
- C++中使用空对象指针调用成员函数
- C++中const用法小结
- C++知识点积累(1)
- 数据库设计与SQL查询优化
- Swift2.0语言教程之类的属性
- Swift2.0语言教程之类的方法
- Redis安装
- 常用接口
- linux的权限
- SpringFramework4系列之整合Resteasy
- Eclipse中如何修改SVN的地址
- socket连接返回错误码
- Spring RESTful服务接收和返回JSON最佳实践
- jquery.validate使用攻略
- Android开发的技术层次
- java面试---自动装箱
- 如何设置bios让电脑从U盘启动
- Oracle ORA-01555 快照过旧 说明
- 忘记帖附件?让Outlook自动提示
- Android SDK下载