• <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>

            學習《C++ Primer》的筆記

            函數指針的一種替代策略是Function object(函數對象)。

            函數對象與函數指針相比較有兩個方面的優點:首先如果被重載的調用操作符是inline函數則編譯器能夠執行內聯編譯,提供可能的性能好處;其次函數對象可以擁有任意數目的額外數據,用這些數據可以緩沖結果,也可以緩沖有助于當前操作的數據。

            函數對象是一個類,它重載了函數調用操作符operator() ,該操作符封裝了一個函數的功能。典型情況下函數對象被作為實參傳遞給泛型算法,當然我們也可以定義獨立的函數對象實例。

            來看一個例子:

            #include<vector>
            #include<string>
            #include<iostream>
            #include<algorithm>
            using namespace std;
            class Sum {
            int val;
            public:
            Sum(int i) :val(i) { }

            //當在需要int的地方,Sum將自動轉換為int類型
            //這里是為了方便cout<<Sum的實例;
            operator int() const { return val; }

            //寫在類中的函數代碼一般默認為內聯代碼
            int operator()(int i) { return val+=i; }
            };

            void f(vector<int> v)
            {
            Sum s = 0; //Sum s = 0等價于Sum s(0),不等價于Sum s;s = 0;

            //對vector<int>中的元素求和
            //函數對象被作為實參傳遞給泛型算法
            s = for_each(v.begin(), v.end(), s);

            cout << "the sum is " << s << "\n";

            //更簡單的寫法,定義獨立的函數對象實例
            cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "\n";
            }


            int main()
            {
            vector<int> v;
            v.push_back(3); v.push_back(2); v.push_back(1);
            f(v);
            system("pause");
            return 0;
            }
            posted on 2005-12-01 20:14 張沈鵬 閱讀(872) 評論(9)  編輯 收藏 引用
            Comments
            • # re: Function object(函數對象)
              味全每日C++
              Posted @ 2005-12-01 21:21
              Sum s = 0;//(為什么可以用s = 0來初始化?沒有重載 operator=啊!!!)
              這里是因為類自動生成的賦值函數吧..  回復  更多評論   
            • # re: Function object(函數對象)
              c++基礎
              Posted @ 2005-12-01 22:19
              Sum s = 0;
              等同于
              Sum s(0);

              Sum s = 0;
              s = 0;
              兩個=含義不同  回復  更多評論   
            • # re: Function object(函數對象)
              c++基礎
              Posted @ 2005-12-01 22:38
              to 樓上:
              不是什么拷貝構造函數,只是普通的帶參數的構造函數

              口誤吧,呵呵  回復  更多評論   
            • # re: Function object(函數對象)
              力為
              Posted @ 2005-12-01 22:54
              Sum s = 0;//(為什么可以用s = 0來初始化?)
              這個確實是C++的基本問題,沒有弄懂這個問題,可以說是C++小學水平的。
              讀了《Effective C++》的都應該知道的吧。:)  回復  更多評論   
            • # re: Function object(函數對象)
              joyfire
              Posted @ 2005-12-01 23:09
              沒有必要因為一點小問題打擊人家。C++博大精深,誰能有把握說自己完全掌握。學習的興趣和行動比什么都重要。我從zuroc的blog學到了不少東西。  回復  更多評論   
            • # re: Function object(函數對象)
              張沈鵬
              Posted @ 2005-12-01 23:52
              學習C++中,我剛大二,并且專業也和編程關系不大,水平很淺,見笑了。。。。。。。  回復  更多評論   
            • # re: Function object(函數對象)
              放屁阿狗
              Posted @ 2005-12-07 22:53
              看看 bind2nd就明白了,其實c++的東西沒有直接看代碼來的體會直接和深刻  回復  更多評論   
            • # re: Function object(函數對象)
              simida
              Posted @ 2006-11-16 14:48
              why Sum s = 0?
              先調用 Sum(int i) 構建臨時對象 temp(0).然后調用拷貝構造函數?
              還是 直接讓s指向temp(0)?

                回復  更多評論   
            • # re: Function object(函數對象)
              張沈鵬
              Posted @ 2006-11-16 16:00
              隱式類轉換
              c++ primer上有的  回復  更多評論   
             
            久久国产乱子精品免费女| 久久精品国产半推半就| 久久天天躁狠狠躁夜夜av浪潮| 国产毛片久久久久久国产毛片 | 亚洲国产精品无码久久青草| 亚洲国产成人久久综合区| 亚洲中文字幕无码久久2017| 99久久精品国产一区二区| 色妞色综合久久夜夜| 国产99久久精品一区二区| 亚洲国产小视频精品久久久三级 | 久久精品国产一区二区| 狠狠色丁香久久婷婷综合| 久久九九有精品国产23百花影院| 久久久久综合国产欧美一区二区 | 内射无码专区久久亚洲| 久久久久高潮毛片免费全部播放| 无码任你躁久久久久久老妇| 996久久国产精品线观看| 人人狠狠综合88综合久久| 亚洲国产精品久久久久婷婷老年| 久久久久久国产精品无码下载| 精品久久综合1区2区3区激情| 看久久久久久a级毛片| 狠狠色丁香久久婷婷综合_中 | 99精品国产99久久久久久97| 久久se精品一区二区影院| 九九久久99综合一区二区| 人妻无码久久一区二区三区免费| 伊人久久精品影院| 久久精品中文字幕一区| 国产精品一区二区久久精品无码| 国产精品久久久久久吹潮| 亚洲va久久久噜噜噜久久狠狠| 99精品国产免费久久久久久下载| 久久久久久青草大香综合精品| 国产成人综合久久精品尤物| 久久久国产精品福利免费| 久久夜色精品国产亚洲| 狠狠色噜噜狠狠狠狠狠色综合久久| 7777久久亚洲中文字幕|