熊熊出没 发表于 2025-10-29 06:54:14

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指向函数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

总结


[*]成员函数指针是一种高级功能,常见于框架计划或动态调用类的成员函数。
[*]使用成员函数指针时要连合具体对象,不能像平常函数指针直接调用。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C++中的.*运算符