在C++中,成員函數(shù)指針用于指向類的成員函數(shù)。定義和使用成員函數(shù)指針的步驟如下:
定義成員函數(shù)指針類型:成員函數(shù)指針類型的定義格式為:返回類型 (類名::*指針變量名)(參數(shù)列表)
。其中,返回類型是成員函數(shù)的返回類型,類名是包含成員函數(shù)的類名,指針變量名是成員函數(shù)指針的名稱,參數(shù)列表是成員函數(shù)的參數(shù)列表。
初始化成員函數(shù)指針:成員函數(shù)指針可以通過成員函數(shù)的地址進(jìn)行初始化,使用&類名::成員函數(shù)名
的方式獲取成員函數(shù)的地址,并將其賦值給成員函數(shù)指針。
調(diào)用成員函數(shù)指針:成員函數(shù)指針可以通過以下兩種方式進(jìn)行調(diào)用:
使用指針變量和對象實(shí)例調(diào)用:使用指針變量和對象實(shí)例使用->*
運(yùn)算符來調(diào)用成員函數(shù)指針,語法格式為對象實(shí)例->*指針變量名
。
使用指針變量和對象指針調(diào)用:使用指針變量和對象指針使用.*
運(yùn)算符來調(diào)用成員函數(shù)指針,語法格式為對象指針.*指針變量名
。
以下是一個示例代碼,演示了如何定義和使用成員函數(shù)指針:
#include <iostream>
class MyClass {
public:
void func(int x) {
std::cout << "func: " << x << std::endl;
}
};
int main() {
// 定義成員函數(shù)指針類型
typedef void (MyClass::*FuncPtr)(int);
// 初始化成員函數(shù)指針
FuncPtr ptr = &MyClass::func;
// 創(chuàng)建對象實(shí)例
MyClass obj;
// 調(diào)用成員函數(shù)指針
(obj.*ptr)(10); // 使用對象實(shí)例調(diào)用
MyClass* pObj = &obj;
(pObj->*ptr)(20); // 使用對象指針調(diào)用
return 0;
}
輸出結(jié)果為:
func: 10
func: 20
注意:成員函數(shù)指針只能指向非靜態(tài)成員函數(shù),不能指向靜態(tài)成員函數(shù)。