当前位置: 首页 > news >正文

C++中的.*运算符

看运算符重载的时候,看到这一句

.*   ::   sizeof   ?:    . 注意以上5个运算符不能重载。

  ::   sizeof   ?:    . 这四个好理解,毕竟都学过,但.*是什么?

于是自己整理了一下

.* 是一种 C++ 中的运算符,称为指针到成员操作符。它用于访问类成员指针所指向的成员变量或成员函数,结合一个对象或对象指针一起使用。

 给段代码

class OB{
public:void func(){cout << "void func()" << endl;}
};typedef void(OB::*PtrFunc)() ;//成员函数指针类型int main(){// 函数指针// void (*ptr)();// 成员函数要加&才能取到函数指针PtrFunc fp = &OB::func;//定义成员函数指针p指向函数funcOB temp;//定义ob类对象temp(temp.*fp)();return 0;
}

前面应该都没问题,直接看到这一句来

	(temp.*fp)();

使用成员函数指针调用 temp 的成员函数 func

temp.*fp 表示:对对象 temp 使用成员函数指针 fp 指向的函数。

所以大概就是用与这种场合?

当然前面提到,这也可以用在成员变量指针上

#include <iostream>
using namespace std;class Test {
public:int x;int y;
};int main() {Test obj;obj.x = 10;obj.y = 20;// 定义成员变量指针int Test::*ptr = &Test::x;// 使用 .* 访问 obj 中的成员变量cout << "Value of x: " << obj.*ptr << endl; // 输出 10// 修改成员变量值obj.*ptr = 100;cout << "Updated x: " << obj.x << endl;    // 输出 100return 0;
}
几点需要注意的地方:

1.成员函数指针 vs 普通函数指针

  • 普通函数指针不能指向成员函数,因为成员函数需要 this 指针来调用,而普通函数没有这个需求。
  • 成员函数指针需要结合对象(如 (temp.*fp))才能使用。

2.取地址时需要加 &

  • 取类成员函数地址时必须加 &,如 &OB::func
  • 普通函数指针可以省略 &

3.调用成员函数时需要通过对象:

  • (temp.*fp)() 是基于对象 temp 来调用的。
  • 如果对象是指针,则需要用 ->* 运算符调用成员函数: 
    OB* objPtr = &temp;
    (objPtr->*fp)();
    

4.成员函数的参数与返回值:

  • 如果成员函数有参数,调用时需要提供实参:
    typedef void(OB::*PtrFuncWithArgs)(int);
    void OB::funcWithArgs(int x) { cout << x << endl; }
    PtrFuncWithArgs fp = &OB::funcWithArgs;
    (temp.*fp)(42); // 输出 42
    
总结
  • 成员函数指针是一种高级功能,常见于框架设计或动态调用类的成员函数。
  • 使用成员函数指针时要结合具体对象,不能像普通函数指针直接调用。

http://www.lryc.cn/news/539553.html

相关文章:

  • 深度学习笔记——LSTM
  • spring boot知识点2
  • 【机器学习】CNN与Transformer的表面区别与本质区别
  • 框架篇 - Hearth ArcGIS 框架扩展(DryIoC、Options、Nlog...)
  • JUC并发—7.AQS源码分析三
  • windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI
  • 当C#邂逅Deepseek, 或.net界面集成deepseek
  • Cursor实战:Web版背单词应用开发演示
  • Kotlin Lambda
  • V4L2驱动之UVC
  • numpy(01 入门)
  • Chatgpt论文润色指令整理
  • vscode复制到下一行
  • Python天梯赛刷题-五分题(上)
  • 【优先级队列】任务分配
  • 设计模式之适配模式是什么?以及在Spring AOP中的拦截器链的使用源码解析。
  • Python 库自制 Cross-correlation 算法
  • C++(23):为类成员函数增加this参数
  • javaSE学习笔记23-线程(thread)-总结
  • 【DeepSeek服务器部署全攻略】Linux服务器部署DeepSeek R1模型、实现API调用、搭建Web页面以及专属知识库
  • 【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维
  • 算法日记20:SC72最小生成树(prim朴素算法)
  • 玩转SpringCloud Stream
  • 嵌入式经常用到串口,如何判断串口数据接收完成?
  • iOS App的启动与优化
  • 导出指定文件夹下的文件结构 工具模块-Python
  • Leetcode - 周赛436
  • 【pytest】编写自动化测试用例命名规范README
  • Compose常用UI组件
  • 斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)