类成员函数指针
在 QT 中当我们要连接一个重载的信号和槽函数时, 直接对成员函数取地址无法确定调用的是哪个函数, 这时候可以使用类成员函数指针来接收成员函数地址, 同过函数指针的类型来确定调用的是哪个函数。
语法:
- 定义
返回值类型 (类名:: * 指针名) (参数列表) = &类名::函数名
通过 等号左侧的 返回值类型 + 参数列表 就可区分调用的是哪个函数, 然后就可以传给 connnect
函数了
- 调用
(类对象.*指针名)(参数列表);
(类对象指针->*指针名)(参数列表);
这里的前面一对括号是很重要的,因为()的优先级高于成员操作符指针的优先级。
指向类数据成员的指针
和类成员函数指针类似, 不过它指向的是类的成员变量, 要注意的是成员变量指针作为一个变量,在底层实现上,存放的是对象的数据成员相对于对象首地址的偏移量,通过成员变量指针访问成员变量时需要提供对象的首地址,即通过对象来访问。
语法:
- 定义
成员类型 类名::*pointer = &类名::成员变量名
- 访问
类对象.*指针名
类对象指针->*指针名;
总结
使用 ::*
声明一个成员指针类型,或者定义一个成员指针变量。使用 .*
或者 ->*
调用类成员函数指针所指向的函数, 或访问 类成员变量指针指向成员变量