C++编程:掌握指向成员的指针与成员函数指针用法
需积分: 3 187 浏览量
更新于2024-07-24
收藏 819KB PDF 举报
"深入理解C++中的指向成员的指针"
在C++中,掌握如何使用指向成员的指针是提高编程技巧的关键。这包括指向数据成员的指针和指向成员函数的指针,它们允许我们以更灵活的方式访问和操作对象的内部结构。
1. 指向数据成员的指针
在C++中,可以声明一个指针变量来指向类的特定数据成员。声明这样的指针需要使用`类型说明符 类名::* 指针名`的语法。例如:
```cpp
int Point::*myptr; // 声明一个指向Point类的int类型数据成员的指针
```
赋值时,我们需要使用类名和作用的数据成员,如:
```cpp
myptr = &Point::x; // 假设Point有一个名为x的int类型数据成员
```
访问数据成员时,可以使用`.`或`->`操作符,取决于我们是否已经有一个对象实例。如果对象名为`obj`,则访问方式为`obj.*myptr`;如果`myptr`指向的是对象指针`obj_ptr`所指的对象,则访问方式为`obj_ptr->*myptr`。
2. 指向成员函数的指针
C++也支持指向成员函数的指针,这对于回调函数或事件处理非常有用。声明一个指向成员函数的指针的语法如下:
```cpp
返回类型 (类名::*指针名)(参数列表);
```
例如,如果我们有一个名为`time::get_time`的无参成员函数,可以这样声明:
```cpp
void (time::*p2)() = &time::get_time; // 声明并赋值
```
调用成员函数时,需要通过对象实例来完成,因为成员函数与对象紧密相关。例如:
```cpp
(t1.*p2)();
```
或者,如果`p2`是指向`t1`的指针,可以写为:
```cpp
(t1->*p2)();
```
请注意,成员函数指针的声明、赋值和使用时的返回值类型以及参数列表必须完全匹配,否则会导致编译错误。
在给出的示例代码中,可以看到这些概念的实际应用:
- `int(point::*p_getx)() = &point::getx;` 是声明并赋值一个指向成员函数`getx`的指针。
- `(A.*p_getx)()` 使用该指针调用`point`对象`A`的`getx`方法。
- `(p1->getx)()` 直接调用`point`指针`p1`所指向的对象的`getx`方法。
- `int time::*p6 = &time::hour;` 是声明一个指向`time`类的`int`类型数据成员`hour`的指针。
- `t1.*p6` 和 `p2->*p6` 分别通过对象实例和指针调用`hour`成员。
通过理解和熟练运用这些概念,C++程序员可以创建更加复杂和高效的设计,比如在模板元编程、回调机制和面向切面编程中。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-08-28 上传
2018-06-23 上传
2010-11-24 上传
2011-07-01 上传
2009-11-12 上传
邻家男孩zero
- 粉丝: 0
- 资源: 1
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍