类成员指针

默认分类 · 2024-05-16 · 50 人浏览

类成员函数指针

在 QT 中当我们要连接一个重载的信号和槽函数时, 直接对成员函数取地址无法确定调用的是哪个函数, 这时候可以使用类成员函数指针来接收成员函数地址, 同过函数指针的类型来确定调用的是哪个函数。

语法:

  1. 定义

返回值类型 (类名:: * 指针名) (参数列表) = &类名::函数名

通过 等号左侧的 返回值类型 + 参数列表 就可区分调用的是哪个函数, 然后就可以传给 connnect 函数了

  1. 调用
  • (类对象.*指针名)(参数列表);
  • (类对象指针->*指针名)(参数列表);

这里的前面一对括号是很重要的,因为()的优先级高于成员操作符指针的优先级。

指向类数据成员的指针

和类成员函数指针类似, 不过它指向的是类的成员变量, 要注意的是成员变量指针作为一个变量,在底层实现上,存放的是对象的数据成员相对于对象首地址的偏移量,通过成员变量指针访问成员变量时需要提供对象的首地址,即通过对象来访问。

语法:

  1. 定义

成员类型 类名::*pointer = &类名::成员变量名

  1. 访问
  • 类对象.*指针名
  • 类对象指针->*指针名;

总结
使用 ::* 声明一个成员指针类型,或者定义一个成员指针变量。使用 .* 或者 ->* 调用类成员函数指针所指向的函数, 或访问 类成员变量指针指向成员变量

Theme Jasmine by Kent Liao