Re: [分享] Function vs Member Function Pointers
推
04/08 23:43,
04/08 23:43
→
04/08 23:43,
04/08 23:43
→
04/08 23:44,
04/08 23:44
以剪頭髮為例
class 頭髮很長的顧客 {
private:
int 美金, 歐元, 台幣;
public:
int 用歐元付錢() { ... }
int 用台幣付錢() { ... }
int 用美金付錢() { ... }
// ...略
};
typedef int (頭髮很長的顧客::*付款方式)(); // pointer to method
void 剪頭髮(頭髮很長的顧客 &somebody, 付款方式 paymethod) {
if ( (somebody.*paymethod)() > 0 ) {
// 開始剪頭髮
} else {
// 趕人
}
}
int main() {
頭髮很長的顧客 言承旭, 吳建豪, 朱孝天, 周渝民;
剪頭髮(朱孝天, &頭髮很長的顧客::用台幣付錢);
剪頭髮(朱孝天, &頭髮很長的顧客::用歐元付錢); // 就想剪兩次呀
return 0;
}
上面這是語法。
Q. 那為什麼一定要寫成 class,不把 "付錢函數" 都寫成普通的 C Functions 就好?
A. 財產要封裝成 private,所以需要 class,所以需要建物件
一定要把付錢函數寫成 method 的原因,如上面所述,那為什麼不要直接
『朱校天.用台幣付錢就好();』去呼叫就好,用什麼鬼外幣?
爽呀,有錢收就好,管人家用什麼幣。
以函數的角度來說,只要 signature 是 int (*)() 形式即可,具體要對應到哪個
method 是無法預測的,所以非得用 pointer to method 不可。
你怎麼可能一開始就預測到要呼叫哪個記憶體位址裡的 member function。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.138.253
蔡學鏞寫的兩篇「函數指標的進化論」跟此主題蠻搭的,
C++ 傳統的 ptr to method/function,常應用在事件處理、callback。
JAVA 什麼都沒有,對應方案常用 Interface 解決。(當然這不是唯一的方法)
C# 對於此,則新增了 delegate,相當於功能強一點的 ptr to method。
QT 則有 signal, slot 機制。
※ 編輯: purpose 來自: 124.8.128.24 (04/09 09:15)
推
04/09 09:45, , 1F
04/09 09:45, 1F
推
04/09 09:53, , 2F
04/09 09:53, 2F
推
04/09 11:02, , 3F
04/09 11:02, 3F
推
04/10 01:52, , 4F
04/10 01:52, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章