您的位置:首页 > 其它

如何使用指向类的成员函数的指针(详解!)

2017-11-06 09:48 239 查看
原文:如何使用指向类的成员函数的指针(详解!)

另外一篇英文参考:Member Function Pointers and the Fastest Possible C++ Delegates

我们首先复习一下"指向函数的指针"如何使用?

[cpp] view plain copy

print?

void print()

{

}

void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 void

pfun = print; //赋值一个指向函数的指针

(*pfun)(); //使用一个指向函数的指针

[b]

1 #include <bits/stdc++.h>
2 using namespace std;
3
4 #define debug(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
5
6 class LuggageCompartment  {
7 private:
8     int m_iLuggage;    //私有变量,保存现在的行李总数
9 public:LuggageCompartment() {
10         m_iLuggage = 0;
11     }            //构造函数
12     int TakeoutLuggage()    //取出一件行李
13     {
14         if (m_iLuggage != 0)
15             m_iLuggage--;
16         return m_iLuggage;
17     }
18     int InsertLuggage()    //放入一件行李
19     {
20         return (++m_iLuggage);
21     }
22     int checkLuggage()    //检查行李总数
23     {
24         return m_iLuggage;
25     }
26 };
27
28 class FlightSegment  {
29 private:LuggageCompartment * m_pLC;    //成员指针
30 public:void SetLuggageCompartment(LuggageCompartment * pLC)  {
31         m_pLC = pLC;
32     }            //设置成员指针
33     FlightSegment()    //构造函数将成员指针初始化为null
34     {
35         m_pLC = NULL;
36     }
37     int checkLuggage()  {
38         if (m_pLC == NULL)
39             return -1;
40         return m_pLC->checkLuggage();    //将函数调用委托给成员指针
41     }
42 };
43
44
45
46 int main(int argc, char *argv[])
47 {
48     FlightSegment segment;
49     LuggageCompartment lc1, lc2;
50     for (int i = 0; i < 10; i++)
51         lc1.InsertLuggage();
52     segment.SetLuggageCompartment(&lc1);
53     cout << "Now we have " << segment.checkLuggage()
54          <<" Luggages." << endl;
55     segment.SetLuggageCompartment(&lc2);
56     cout << "Now we have " << segment.checkLuggage()
57          <<" Luggages." << endl;
58     return 0;
59 }


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: