理解C++中指向类成员函数的指针用法
版权申诉
152 浏览量
更新于2024-08-31
收藏 55KB PDF 举报
"这篇文档详细介绍了如何使用指向类的成员函数的指针,包括基本概念、声明、赋值以及在实际编程中的应用。"
在C++中,指向类的成员函数的指针与普通函数指针类似,但有一个重要的区别,即它还需要关联到特定的类。这是因为类的成员函数在内存中有其特殊的存储方式,它们并不像全局函数那样有固定的地址。因此,我们需要特别的方式来声明和使用指向类成员函数的指针。
首先,让我们回顾一下指向普通函数的指针。例如,有一个名为`print`的函数,没有参数也没有返回值,我们可以声明并赋值一个指向该函数的指针`pfun`如下:
```cpp
void print() {}
void (*pfun)(); // 声明一个指向void类型无参数函数的指针
pfun = print; // 赋值
(*pfun)(); // 使用
```
这里需要注意的是,由于操作符`*`的优先级低于`(`,所以在调用指针所指向的函数时,需要使用`(*pfun)`来确保先解引用再调用。
对于指向类成员函数的指针,情况稍微复杂一些。假设我们有一个名为`A`的类,其中有一个成员函数`speak`,接受两个参数`char*`和`const char*`,声明这样的指针`pmf`如下:
```cpp
class A {
public:
void speak(char*, const char*);
};
void main() {
A a;
void (A::*pmf)(char*, const char*); // 声明指向A类成员函数的指针
pmf = &A::speak; // 赋值
}
```
这里,`pmf`是一个指向`A`类的成员函数的指针,返回类型为`void`,带有两个参数。在声明时,我们会在星号`*`前加上类名`A::`来表示这是指向类`A`成员函数的指针。此外,可以使用`typedef`创建类型别名,简化代码:
```cpp
typedef void (A::*PMA)(char*, const char*);
PMA pmf = &A::speak; // pmf现在是PMA类型的变量
```
在类的使用示例中,文档可能提到了一个`Person`类,它有一个非虚函数`speak`和一个虚函数`hello`。`speak`函数可以用来验证成员函数指针的地址。当我们有一个派生类`Baizhantang`继承自`Person`时,可以使用指向成员函数的指针来调用相应的成员函数,这在多态性编程中非常有用。
掌握指向类成员函数的指针使用能帮助我们在C++中实现更灵活的面向对象编程,特别是在涉及到动态绑定和多态时。通过这种机制,我们可以动态地决定调用哪个类的特定成员函数,从而实现代码的复用和扩展。
2022-07-10 上传
2021-10-13 上传
2023-02-27 上传
2014-04-13 上传
2023-02-27 上传
2023-02-27 上传
2023-11-10 上传
2022-10-27 上传
2021-08-03 上传
qianqian_xixi
- 粉丝: 0
- 资源: 4万+
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析