C++之类成员指针
来源:互联网 发布:工信部大数据认证考试 编辑:程序博客网 时间:2024/06/03 05:14
//
需要用到 .* 和 ->* 两个操作符了。其实这两个操作符也没啥新奇的。. 和 ->分别为对象和对象指针的成员访问操作符, 而 * 则为解引用操作符。当写下 aC.*ipm 时,其实就是请求将 aC的地址加上ipm所表示的偏移量,然后访问该 aC 所表示的对象中的特定数据成员。当写下 pC->*ipm 时,其实就是pC所指向的地址加上ipm所表示的偏移量,然后访问pC所指向的对象中的特定数据成员。
//
一、指向成员变量的指针并非指针
C++中指向成员变量的指针其实是一个相对于类对象的偏移量。《C++必知必会》的条款15讲述了这一说法:“与常规指针不同,一个指向成员变量的指针并不指向一个内存位置。它指向的是一个类的特定成员,而不是指向一个特定对象里的特定成员。通常最清晰的做法是将指向数据成员的指针看作为一个偏移量。......。这个偏移量告诉你,一个特定成员的位置距离对象的起点有多少个字节。”
看一段示例代码:
由其可见,给定一个成员变量在类中的偏移量,为了访问位于那个偏移量的数据成员,我们还需要该类的一个对象的地址。这时候就需要用到 .* 和 ->* 两个操作符了。其实这两个操作符也没啥新奇的。. 和 ->分别为对象和对象指针的成员访问操作符, 而 * 则为解引用操作符。当写下 aC.*ipm 时,其实就是请求将 aC的地址加上ipm所表示的偏移量,然后访问该 aC 所表示的对象中的特定数据成员。当写下 pC->*ipm 时,其实就是pC所指向的地址加上ipm所表示的偏移量,然后访问pC所指向的对象中的特定数据成员。
二、指向成员函数的指针并非指针
获取非静态成员函数的地址时,得到的不是一个地址,而是一个指向成员函数的指针。为了对一个指向成员函数的指针进行解引用,需要一个对象或一个指向对象的指针。因为通过指向成员函数的指针调用该函数时,需要将对象的地址用作this指针的值,以便进行函数调用(当然,也有其它的用途)。
下面是一段“指向成员函数指针”使用的示例代码:
尽管指向类成员(包括成员变量和成员函数)的指针使用很少,但是知道这些概念还是有好处的。
- 顶
- 2
- 踩
0 0
- C++之类成员指针
- C++之类成员指针
- 成员函数指针 还有std::function之类
- 学习笔记之类的数据成员指针和函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- 透过汇编另眼看世界之类成员函数指针
- c++primer之类(类的静态成员)
- C++之类成员初始化
- 学习C++(2)之类的静态成员及静态成员函数
- Linux C 使用指针访问成员
- 成员函数的指针(C++)
- c语言结构体指针成员初始化
- c++:成员指针运算符 .* 和 ->*
- 测试用户名称大全
- 树&&二叉树
- CentOS 7中runlevel到target的改变
- 对于一个小白来说,遇到的前端问题(2)
- Linux常用命令及使用技巧(持续更新中)
- C++之类成员指针
- Realm更新字段
- mac 下配置adb
- Java内部类应用
- 屏幕截图的几种方法
- Linux下二进制软件安装
- Linux外在设备的使用
- CentOS 7系统服务管理工具systemctl介绍
- 使用android studio查看andrdoid源码