指向類成員

最近我收到許多有關類方法指針的問題,比如:在 VC 中無法使用類方法指針,編譯器報如下錯誤:

我該怎麼辦?

下面是解決這個問題的代碼:


  大家知道,類成員都有一個隱含的參數,即類對象本身的一個指針,其方法都是這個對象上調用的。C++ 使用該指針查找任何方法擬引用的類數據的位置。如果你想嘗試用標準函數指針來調用某個類的方法,C++ 便無法傳遞此隱含的參數,並且要引發衝突。
  爲了解決這個問題並改進類型安全機制,C++ 添加了三個新操作符,::*、.* 和->,以便引入安全的成員指針。這些成員指針既可以指向成員函數,也可以指向變量。

  這個例子示範了成員指針的使用。代碼用::*操作符將 lpFunc 聲明爲一個 CTest 成員函數的指針。注意,這裏並不是在運行時賦值給這個指針,該指針在聲明中被初始化。在 main 函數中,此例子用 .* 操作符來調用由 lpFunc 指向的方法。如果這裏 test 是一個指針,你將用 ->* 操作符代替。
  C++ 有許多像隱藏方法參數這樣的內部機制。成員指針使你能安全地聲明類方法指針並通過該指針來調用方法。
 
作者簡介
  Danny Kalev 是一名通過認證的系統分析師,專攻 C++ 和形式語言理論的軟件工程師。1997 年到 2000 年期間,他是 C++ 標準委員會成員。最近他以優異成績完成了他在普通語言學研究方面的碩士論文。 業餘時間他喜歡聽古典音樂,閱讀維多利亞時期的文學作品,研究 Hittite、Basque 和 Irish Gaelic 這樣的自然語言。其它興趣包括考古和地理。Danny 時常到一些 C++ 論壇並定期爲不同的 C++ 網站和雜誌撰寫文章。他還在教育機構講授程序設計語言和應用語言課程。
 
發佈了31 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章