• <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 張沈鵬 閱讀(880) 評論(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久久久无码| 亚洲精品乱码久久久久久自慰| 国产精品久久波多野结衣| 久久精品国产亚洲AV忘忧草18| 浪潮AV色综合久久天堂| 91精品国产9l久久久久| 久久露脸国产精品| 久久精品亚洲精品国产色婷| 久久精品国产欧美日韩| 日韩人妻无码精品久久久不卡| 天天久久狠狠色综合| 中文字幕久久久久人妻| 97久久精品人人做人人爽| 国产毛片欧美毛片久久久| 久久久99精品成人片中文字幕| 久久久久亚洲AV无码永不| 99久久香蕉国产线看观香| 久久精品国产精品亚洲| 久久99精品国产| 久久精品国产亚洲AV电影| 一本色道久久88综合日韩精品 | 狠狠色婷婷综合天天久久丁香| 手机看片久久高清国产日韩 | 午夜精品久久久久9999高清| 久久国产精品99国产精| 久久精品久久久久观看99水蜜桃| 91久久精品国产免费直播| .精品久久久麻豆国产精品| 97精品国产97久久久久久免费| 香蕉99久久国产综合精品宅男自 | 97久久婷婷五月综合色d啪蜜芽| 日韩中文久久| 久久一区二区三区免费| 久久天天躁狠狠躁夜夜不卡| 久久99久久无码毛片一区二区| 青青草原综合久久| 国产精品一区二区久久精品无码| 精品国产福利久久久| 精品免费tv久久久久久久| 欧美激情精品久久久久| 久久99精品久久久久久野外|