C++类_成员函数指针

      在 C++11 里,成员函数指针是一种特殊的指针,它指向类的成员函数。下面详细介绍成员函数指针的定义、使用及注意事项。

定义

成员函数指针的定义格式如下:

返回类型 (类名::*指针名)(参数列表);

例如:

class MyClass {
public:void func(int param) {// 函数实现}
};// 定义成员函数指针
void (MyClass::*ptr)(int) = &MyClass::func;

使用

要使用成员函数指针,需借助对象或者对象指针来调用。下面给出两种调用方式的示例:

#include <iostream>class MyClass {
public:void func(int param) {std::cout << "Function called with parameter: " << param << std::endl;}
};int main() {// 定义成员函数指针void (MyClass::*ptr)(int) = &MyClass::func;// 使用对象调用MyClass obj;(obj.*ptr)(10);// 使用对象指针调用MyClass* objPtr = &obj;(objPtr->*ptr)(20);return 0;
}

在上述代码中,先是定义了一个指向 MyClass 类中 func 函数的成员函数指针 ptr,接着分别利用对象 obj 和对象指针 objPtr 来调用该成员函数。

注意事项

  1. 取地址:定义成员函数指针时,必须使用 & 运算符来获取成员函数的地址。
  2. 调用方式:使用对象调用成员函数指针时要用 .* 运算符,而使用对象指针调用时则要用 ->* 运算符。
  3. 类型匹配:成员函数指针的返回类型和参数列表必须与所指向的成员函数严格匹配。
  4. 静态成员函数:静态成员函数不属于任何对象,所以不能用成员函数指针指向静态成员函数,不过可以用普通函数指针指向静态成员函数。
#include <iostream>class MyClass {
public:static void staticFunc() {std::cout << "Static function called." << std::endl;}
};int main() {// 普通函数指针指向静态成员函数void (*staticPtr)() = &MyClass::staticFunc;staticPtr();return 0;
}

在这个例子中,使用普通函数指针 staticPtr 指向 MyClass 类的静态成员函数 staticFunc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qmt下载的数据放在了哪里了?

#qmt获取日线数据 from xtquant import xtdata # 设置股票代码列表和时间范围 stock_list xtdata.get_stock_list_in_sector(沪深A股) # print("获取到的股票列表&#xff1a;", stock_list,len(stock_list)) start_time 20240501 end_time 20250501# 下载多只股票…

深入浅出数据库管理系统

数据库管理系统&#xff1a;数字世界的“隐形管家” ——从数据杂乱到井井有条的秘密武器 一、数据库管理系统&#xff1a;数字世界的“隐形管家” 你有没有想过&#xff0c;为什么我们在电商平台购物时&#xff0c;商品库存能实时更新&#xff1f;为什么银行转账时&#xff…

关于Docker拉取镜像超时/无法访问镜像仓库解决方案

文章目录 关于Docker拉取镜像超时/无法访问镜像仓库解决方案卸载原先安装的Docker及相关配置使用代理后无法拉取镜像解决方案验证代理连通性安装 Docker 最新版配置 Docker Daemon HTTP 代理重启验证与拉取镜像 不使用代理解决方案安装 Docker 最新版配置阿里云容器镜像加速 关…

Docker Compose:服务编排:批量管理多个容器

通过docker compose进行容器批量管理&#xff1a;一次性启动四个容器&#xff08;nginx&#xff0c;tomcat&#xff0c;redis&#xff0c;mysql&#xff09; &#xff08;1&#xff09; 创建docker-compose目录 mkdir ~/docker-compose cd ~/docker-compose &#xff08;2&…

Java面试大纲(以及常见面试问答)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java面试大纲&#xff08;以及常见面试问答&…

2025年- H25-Lc133- 104. 二叉树的最大深度(树)---java版

1.题目描述 2.思路 返回左右子树中&#xff0c;最高高度的子树,高度从0开始计数。 3.代码实现 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;…

个性化推荐:大数据引领电子商务精准营销新时代

个性化推荐:大数据引领电子商务精准营销新时代 引言 在电子商务的时代,个性化推荐系统已经成为提升用户体验、增强平台竞争力的重要技术。随着大数据技术的迅猛发展,传统的推荐方法已经无法满足用户日益增长的需求。为了精准地把握用户兴趣和消费倾向,商家们依赖大数据分析…

VulnHub-OSCP靶机

前言&#xff1a;由于这台机器过于简单&#xff0c;所以我会尽量细化和介绍每个步骤以及涉及到的知识点&#xff0c;让正在打入门机器的你不在迷茫和硬化的操作&#xff0c;理解并熟悉每条命令以及参数的含义&#xff0c;以及把前期带给我们的信息进行快速筛选&#xff0c;有利…

传感器数据处理笔记

里程计模型&#xff1a; 两轮差分地盘的运动学模型三轮全向底盘的运动学模型航迹推算&#xff08;Dead Reckoning&#xff09; 里程计标定 线性最小二乘的基本原理最小二乘的直线拟合最小二乘在里程计标定中的应用 差分底盘的优势就是&#xff1a; 结构简单便宜&#xff0…

Spring的循环依赖问题和解决方案

在Spring框架中&#xff0c;循环依赖指的是两个或多个Bean之间相互依赖&#xff0c;形成闭环。例如&#xff0c;Bean A依赖于Bean B&#xff0c;而Bean B又依赖于Bean A。这种情况如果处理不当&#xff0c;会导致应用程序无法正常启动。 形成原因 构造函数注入&#xff1a;当使…

PDF转换工具xpdf-tools-4.05

XPDF是一个开源的PDF查看、提取和转换工具套件&#xff0c;使用C编写&#xff0c;支持多种操作系统&#xff0c;包括Linux、Unix、OS/2、Windows和Mac OS X‌1。XPDF不仅是一个PDF查看器&#xff0c;还包含多个实用工具&#xff0c;如文本提取器、图像转换器和HTML转换器等‌&a…

Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录

注&#xff1a;本文为 “Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录” 相关文章合辑。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 Vivado 开发流程&#xff08;手把手教学实例&#xff09;&#xff08;FPGA&#xff09; 不完美先生 于 2018-04-…

【PINN】DeepXDE学习训练营(13)——operator-antiderivative_aligned.py

一、引言 随着人工智能技术的飞速发展&#xff0c;深度学习在图像识别、自然语言处理等领域的应用屡见不鲜&#xff0c;但在科学计算、工程模拟以及物理建模方面&#xff0c;传统的数值方法仍然占据主导地位。偏微分方程&#xff08;Partial Differential Equations, PDEs&…

NPP库中libnppc模块介绍

1. libnppc 模块简介 libnppc 是 NVIDIA Performance Primitives (NPP) 的 核心基础模块,提供跨模块的通用数据类型、内存管理和基础运算功能,不直接实现图像或信号处理算法,而是为其他模块(如 libnppi、libnpps)提供支持。 主要功能包括: 基础数据类型定义(如 Npp8u、…

#基于PCL的多平面分割系统技术文档

多平面分割系统技术文档 一、数据结构定义 /*** @brief 平面分割结果结构体* @param coefficients 平面方程系数(ax+by+cz+d=0)* @param cloud 属于该平面的点云子集* @param centroid 平面质心坐标(齐次坐标)* @param plane_id 平面编号(主平面为1)*/ struct PlaneSegmentRes…

PyTorch_张量拼接

张量的拼接操作在神经网络搭建过程中是非常常用的方法&#xff0c;例如&#xff1a;残差网络&#xff0c;注意力机制中都使用张量拼接。 torch.cat 函数的使用 可以将两个张量根据指定的维度拼接起来。 import torch import numpy as np def test01():data1 torch.randint(…

【SQL触发器、事务、锁的概念和应用】

【SQL触发器、事务、锁的概念和应用】 1.触发器 (一)触发器概述 1.触发器的定义 触发器(Trigger)是一种特殊的存储过程,它与表紧密相连,可以是表定义的一部分。当预定义的事件(如用户修改指定表或者视图中的数据)发生时,触发器会自动执行。 触发器基于一个表创建,…

设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 16&#xff1a;责任链模式小结 在 Day 16 中&#xff0c;我们学习了责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;&#xff1a; 将请求沿链传递&#xff0c;节点可选择处理或传递下一节点。实现了请求发送者与多个处理者的解耦…

如何提升个人情商?

引言 提升个人情商&#xff08;EQ&#xff09;是一个持续的自我修炼过程&#xff0c;涉及自我认知、情绪管理、人际沟通等多个方面。以下是一些具体且可实践的方法&#xff0c;帮助你逐步提升情商&#xff1a; 一、提升自我觉察能力 1. 记录情绪日记 每天回顾自己的情绪…

STM32Cube-FreeRTOS任务调度与任务管理-笔记

STM32Cube-FreeRTOS任务调度与任务管理-笔记 一、任务调度机制1.1 调度算法类型 二、抢占式调度实现与分析2.1 时间片轮转机制2.2 调度触发条件2.3 抢占式调度例子 三、合作式调度实现3.1 核心逻辑3.1 合作式调度例子 四、任务管理函数详解4.1 任务创建4.1.1 动态创建任务4.1.2…