• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 175933
            • 排名 - 151

            最新評(píng)論

            閱讀排行榜

            一.   函數(shù)指針類(lèi)型為全局函數(shù) .

             

             

             

            #include "stdafx.h"

             

            #include <iostream>

            using namespace std;

             

            class TestAction;

             

            typedef void (*fp)(int);

             

            void Drink(int i)

            {

                   cout<<"No. "<<i<<" drink..."<<endl;

            }

             

            void Eat(int i)

            {

                   cout<<"No. "<<i<<" eat..."<<endl;

            }

             

            class TestAction

            {

            public:

                   fp testAct;

             

                   void TestAct(int i)

                   {

                          if (testAct != NULL)

                          {

                                 testAct(i);

                          }

                   }

            };

             

            int main(int argc, char* argv[])

            {    

                   TestAction doact;

                   doact.testAct = &Drink;     

                   doact.TestAct(0);

                   doact.TestAct(1);

                   doact.TestAct(2);

                   doact.testAct = &Eat; 

                   doact.TestAct(0);

                   doact.TestAct(1);

                   doact.TestAct(2);

                   return 0;

            }

             

             

            二.   函數(shù)指針類(lèi)型為類(lèi)成員函數(shù) .

             

             

            #include "stdafx.h"

             

            #include <iostream>

            using namespace std;

             

            class Action;

            class TestAction;

             

            // 函數(shù)指針類(lèi)型為類(lèi) Action 的成員函數(shù)

            typedef void (Action::*fp)(int);

             

            class Action

            {

            public:

                   void Drink(int i)

                   {

                          cout<<"No. "<<i<<" drink..."<<endl;

                   }

             

                   void Eat(int i)

                   {

                          cout<<"No. "<<i<<" eat..."<<endl;

                   }

            };

             

            class TestAction

            {

            public:

                   // 定義一個(gè)函數(shù)指針

                   fp testAct;

                   //Action 對(duì)象實(shí)例 , 該指針用于記錄被實(shí)例化的 Action 對(duì)象

                   Action * pAction;

             

                   void TestAct(int i)

                   {

                          if ((pAction != NULL) && (testAct != NULL))

                          {

                                 // 調(diào)用

                                 (pAction->*testAct)(i);

                          }

                   }

            };

             

            int main(int argc, char* argv[])

            {

                   Action act;

                   TestAction doact;

                   doact.pAction = &act;

                   doact.testAct = Action::Drink;  

                   doact.TestAct(0);

                   doact.TestAct(1);

                   doact.TestAct(2);

                   doact.testAct = Action::Eat;     

                   doact.TestAct(0);

                   doact.TestAct(1);

                   doact.TestAct(2);

                   return 0;

            }

             

             

             

            三.   函數(shù)對(duì)象 (Function object)

             

             

            #include "stdafx.h"

             

            #include <iostream>

            #include <functional>

             

            using namespace std;

             

            class Action;

            class Drink;

            class Eat;

            class TestAction;

             

            class Action

            {

            public:   

                   int operator()(int i)

                   {

                          Act(i);

                          return i;

                   }

             

                   virtual void Act(int i) = 0;

            };

             

            class Drink : public Action

            {

                   void Act(int i)

                   {

                          cout<<"No. "<<i<<" drink..."<<endl;

                   }

            };

             

            class Eat : public Action

            {

                   void Act(int i)

                   {

                          cout<<"No. "<<i<<" eat..."<<endl;

                   }    

            };

             

            class TestAction

            {

            public:

                   void TestAct(int i, Action& testAct)

                   {    

                          testAct(i);

                   }

            };

             

            int main(int argc, char* argv[])

            {           

                   TestAction doact;              

                   doact.TestAct(0, Drink());

                   doact.TestAct(1, Drink());

                   doact.TestAct(2, Drink());  

                   doact.TestAct(0, Eat());

                   doact.TestAct(1, Eat());

                   doact.TestAct(2, Eat());

                   return 0;

            }

             

            雖然傳遞函數(shù)指針被廣泛應(yīng)用于事件驅(qū)動(dòng)系統(tǒng)中,以此實(shí)現(xiàn)回調(diào)函數(shù)通過(guò)指針來(lái)調(diào)用。但 C++ 還是提供了另外一種可供選擇的辦法,即函數(shù)對(duì)象,利用它可以避免使用函數(shù)指針。這樣做有幾個(gè)優(yōu)點(diǎn)。首先, 因?yàn)閷?duì)象可以在內(nèi)部修改而不用改動(dòng)外部接口,因此設(shè)計(jì)更靈活,更富有彈性。函數(shù)對(duì)象也具備有存儲(chǔ)先前調(diào)用結(jié)果的數(shù)據(jù)成員。。 此外,編譯器可以內(nèi)聯(lián)函數(shù)對(duì)象,從而進(jìn)一步增強(qiáng)性能。函數(shù)對(duì)象可以具體表達(dá)依賴成員模板的通用算法 , 這些算法借助普通的函數(shù)指針難以完成。例用函數(shù)對(duì)象實(shí)現(xiàn)了一個(gè)通用的 Negation 算法操作:

             

            #include "stdafx.h"

             

            #include <iostream>

             

            using namespace std;

             

            class Negate

            {

            public:

                   template<class T> T operator()(T t) const

                   {

                          return -t;

                   }

            };

             

            void Callback(int n, const Negate& neg)  // 傳遞一個(gè)函數(shù)對(duì)象

            {

                   n = neg(n);  // 調(diào)用重載的 () 操作 來(lái)對(duì) n 進(jìn)行 negate 操作

                   cout << n << endl;

            }

             

            int main(int argc, char* argv[])

            {

                   // 調(diào)用方式一

                   Callback(5, Negate());

             

                   // 調(diào)用方式二

                   Negate neg;

                   cout << neg(9.99999) << endl;      

                   cout << neg(__int32(39999999)) << endl;

               

                   return 0;

            }

             

                   STL 庫(kù)中定義了很多函數(shù)對(duì)象以供相關(guān)算法調(diào)用,如 模板化的函數(shù)對(duì)象 greater<> 或者 less<>:

             

            vector <int> vi;
            //..
            填充向量

            sort(vi.begin(), vi.end(), greater<int>() );//
            降序 (descending)
            sort(vi.begin(), vi.end(), less<int>() ); //
            升序
            (ascending)

             

            All Test pass[VC6.0]

            posted on 2006-12-26 13:27 erran 閱讀(1409) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): C & C++

            Feedback

            # re: 函數(shù)指針(全局函數(shù)/類(lèi)成員函數(shù))、函數(shù)對(duì)象(Function object) 2006-12-26 15:22 張星
            C++  回復(fù)  更多評(píng)論
              

            # re: 函數(shù)指針(全局函數(shù)/類(lèi)成員函數(shù))、函數(shù)對(duì)象(Function object) 2007-03-23 16:17 taohanjun`
            寫(xiě)的很好啊,對(duì)我來(lái)說(shuō)易懂的資料才是好資料  回復(fù)  更多評(píng)論
              

            久久丝袜精品中文字幕| 久久精品国产一区二区三区日韩| 国产农村妇女毛片精品久久| 国产亚州精品女人久久久久久| 久久国产精品偷99| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久久亚洲精品日久生情 | 国产精品久久久久免费a∨| 亚洲乱码中文字幕久久孕妇黑人| 97久久久精品综合88久久| 久久91精品综合国产首页| 伊人久久精品无码二区麻豆| 久久久久久免费一区二区三区 | 久久人人爽人人爽AV片| 无码久久精品国产亚洲Av影片 | 精品亚洲综合久久中文字幕| 久久综合五月丁香久久激情| 久久99国产精品久久久| 午夜精品久久久久| 99久久精品九九亚洲精品| 久久久久高潮毛片免费全部播放| 久久久久无码专区亚洲av| 久久99国产精品99久久| 久久精品无码专区免费青青| 2021国内久久精品| 久久国产成人| 国产精品成人精品久久久| 久久精品九九亚洲精品天堂| 亚洲第一极品精品无码久久| 国产香蕉久久精品综合网| 色综合久久天天综线观看| 久久99久久成人免费播放| 久久亚洲电影| 97久久香蕉国产线看观看| 久久婷婷国产剧情内射白浆| 色综合久久久久综合99| 日韩va亚洲va欧美va久久| 久久久久人妻一区精品| 久久伊人中文无码| 香蕉久久影院| 性高湖久久久久久久久|