C++编程:掌握指向成员的指针与成员函数指针用法
需积分: 3 183 浏览量
更新于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++程序员可以创建更加复杂和高效的设计,比如在模板元编程、回调机制和面向切面编程中。
126 浏览量
120 浏览量
117 浏览量
2010-11-24 上传
2009-11-12 上传
2011-07-01 上传
125 浏览量
邻家男孩zero
- 粉丝: 0
最新资源
- Arculus图标库新作发布:arculus-icons-master精选集
- KoGPT2:专为韩语文本生成优化的GPT-2变体
- 快速生成代码审查:tongs实用程序使用教程
- Weex开发利器:incubator-weex-cli工具包介绍
- 取色器.zip:跨平台代码辅助神器解析
- 解读指数概念及其在信息技术中的应用
- Putty2186与C2prog:多功能串口及编程软件
- Nette Framework电话号码输入组件的安装与使用指南
- 真实食品食谱:罗伯特·欧文独创凉拌卷心菜等佳肴
- InterForesta: Java技术在森林管理中的应用
- React Native CLI工具:快速创建平台特定图标和启动画面
- 实现7屏横向擦除焦点图的jQuery代码及其兼容性解析
- JS与HTML联合打造电子时钟教程
- 曲线抽屉库:Dart语言实现的弧形封闭式抽屉
- 51单片机基础教程:C语言实现按键检测程序
- MATLAB游戏开发:野猫追逐老鼠的冒险