C++中的.*运算符
- 创业
- 2025-08-30 21:12:02

看运算符重载的时候,看到这一句
.* :: 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指向函数func OB 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; // 输出 100 return 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 总结 成员函数指针是一种高级功能,常见于框架设计或动态调用类的成员函数。使用成员函数指针时要结合具体对象,不能像普通函数指针直接调用。C++中的.*运算符由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++中的.*运算符”