函數(shù)指針是指向函數(shù)的指針變量。函數(shù)指針可以像一般函數(shù)一樣,用于調(diào)用函數(shù)、傳遞參數(shù)。函數(shù)指針只能指向具有特定特征的函數(shù)。因而所有被同一指針運(yùn)用的函數(shù)必須具有相同的參數(shù)和返回類(lèi)型。類(lèi)成員函數(shù)指針,是C++語(yǔ)言的一類(lèi)指針數(shù)據(jù)類(lèi)型,用于存儲(chǔ)一個(gè)指定類(lèi)具有給定的形參列表與返回值類(lèi)型的成員函數(shù)的訪問(wèn)信息。類(lèi)成員函數(shù)指針是一類(lèi)指針數(shù)據(jù)類(lèi)型,C++的語(yǔ)法之一,主要用途是把數(shù)據(jù)與相關(guān)代碼結(jié)合在一起。這與委托、函子、閉包等概念很像。雖然C++對(duì)此支持的并不太好。MFC類(lèi)體系中,Windows消息傳遞處理機(jī)制是基于CCmdTarget類(lèi)及其派生類(lèi)的靜態(tài)數(shù)據(jù)成員與靜態(tài)成員函數(shù)。用戶(hù)所寫(xiě)的類(lèi)中的Windows消息處理函數(shù)必須轉(zhuǎn)換為CCmdTarget::*的成員函數(shù)指針類(lèi)型AFX_PMSG,保存在該用戶(hù)類(lèi)的_messageEntries靜態(tài)數(shù)組中。
成員函數(shù)指針的語(yǔ)法是什么?
使用::*聲明一個(gè)成員指針類(lèi)型,或者定義一個(gè)成員指針變量。使用.*或者->*調(diào)用類(lèi)成員函數(shù)指針?biāo)赶虻暮瘮?shù),這時(shí)必須綁定(binding)于成員指針?biāo)鶎兕?lèi)的一個(gè)實(shí)例的地址。由于C++運(yùn)算符優(yōu)先級(jí)列表中,函數(shù)調(diào)用運(yùn)算符()的優(yōu)先級(jí)高于.*與->*,因此成員函數(shù)指針?biāo)傅暮瘮?shù)被調(diào)用時(shí),必須把實(shí)例對(duì)象或?qū)嵗羔槨?*或->*運(yùn)算符、成員函數(shù)指針用括號(hào)括起來(lái),如上例所示。C++標(biāo)準(zhǔn)規(guī)定,非靜態(tài)成員函數(shù)不是左值,因此非靜態(tài)成員函數(shù)不存在表達(dá)式中從函數(shù)左值到指針右值的隱式轉(zhuǎn)換,非靜態(tài)成員函數(shù)指針必須通過(guò)&運(yùn)算符顯式獲得。所以上例中,pmf = X::f; 將編譯報(bào)錯(cuò)。
關(guān)鍵詞: 什么是成員函數(shù)指針 成員函數(shù)指針的語(yǔ)法是什么 函數(shù)指針的定義及用法 函數(shù)指針指向類(lèi)成語(yǔ)函數(shù)