最近我收到許多有關類方法指標的問題,比如:在 vc 中無法使用類方法指標,編譯器報如下錯誤:
cannot convert parameter 2 from ''long (unsigned long)''to''long (__cdecl *)(unsigned long)''我該怎麼辦?
下面是解決這個問題的**:
//in the header大家知道,類成員都有乙個隱含的引數,即類物件本身的乙個指標,其方法都是這個物件上呼叫的。c++ 使用該指標查詢任何方法擬引用的類資料的位置。如果你想嘗試用標準函式指標來呼叫某個類的方法,c++ 便無法傳遞此隱含的引數,並且要引發衝突。class ckernel:
//in the cpp file
bool ckernel::init()
為了解決這個問題並改進型別安全機制,c++ 新增了三個新操作符,::*、.* 和->,以便引入安全的成員指標。這些成員指標既可以指向成員函式,也可以指向變數。
class ctest這個例子示範了成員指標的使用。**用::*操作符將 lpfunc 宣告為乙個 ctest 成員函式的指標。注意,這裡並不是在執行時賦值給這個指標,該指標在宣告中被初始化。在 main 函式中,此例子用 .* 操作符來呼叫由 lpfunc 指向的方法。如果這裡 test 是乙個指標,你將用 ->* 操作符代替。;long (ctest::*lpfunc)(dword dwinfo) = &ctest::olesendtc;
int main()
long ctest::olesendtc(dword dwinfo)
c++ 有許多像隱藏方法引數這樣的內部機制。成員指標使你能安全地宣告類方法指標並通過該指標來呼叫方法。
作者簡介
danny kalev是一名通過認證的系統分析師,專攻 c++ 和形式語言理論的軟體工程師。1997 年到 2000 年期間,他是 c++ 標準委員會成員。最近他以優異成績完成了他在普通語言學研究方面的碩士**。 業餘時間他喜歡聽古典**,閱讀維多利亞時期的文學作品,研究 hittite、basque 和 irish gaelic 這樣的自然語言。其它興趣包括考古和地理。danny 時常到一些 c++ 論壇並定期為不同的 c++ **和雜誌撰寫文章。他還在教育機構講授程式語言和應用語言課程。
函式指標 指向 類成員
在程式設計工作中常會遇到在乙個 類 中通過函式指標呼叫成員函式的要求,如,當在乙個類中使用了c 標準庫中的排序函式qsort時,因qsort引數需要乙個 比較函式 指標,如果這個 類 使用某個成員函式作 比較函式 就需要將這個成員函式的指標傳給qsort供其呼叫。本文所討論的用指標呼叫 類 的成員函...
指向類成員的指標
一 指向類的普通成員的指標 非靜態 1 指向類成員函式的指標 簡單的講,指向類成員函式的指標與普通函式指標的區別在於,前者不僅要匹配函式的引數型別和個數以及返回值型別,還要匹配該函式指標所屬的類型別。總結一下,比較以下幾點 a 引數型別和個數 b 返回值型別 c 所屬的類型別 特別之處 究其原因,是...
指向類成員的指標
前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...