• <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 張沈鵬 閱讀(869) 評論(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上有的  回復  更多評論   
             
            人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 美女写真久久影院| 国产精品成人无码久久久久久| 久久国产美女免费观看精品| 伊人久久大香线蕉综合热线| 亚洲AV无码久久精品色欲| 久久精品国产半推半就| 久久综合色老色| 伊人丁香狠狠色综合久久| 18岁日韩内射颜射午夜久久成人| 国产精品久久久久久久| 久久久久亚洲AV片无码下载蜜桃| 91久久精品国产91性色也| 综合网日日天干夜夜久久| 久久精品国产亚洲5555| 99久久精品日本一区二区免费| 亚洲精品国产自在久久| 国产99久久久久久免费看| 色婷婷综合久久久久中文 | 久久久久久精品免费看SSS| 天天久久狠狠色综合| 无码国产69精品久久久久网站| 人妻丰满?V无码久久不卡| 国产农村妇女毛片精品久久 | 国产69精品久久久久99| 99久久中文字幕| 国内精品久久久久久99| 久久精品国产久精国产一老狼| 伊人久久大香线蕉精品不卡 | 91亚洲国产成人久久精品| 久久久国产精品网站| 72种姿势欧美久久久久大黄蕉| 久久精品亚洲精品国产色婷| 亚洲人成精品久久久久| 久久香综合精品久久伊人| 色欲av伊人久久大香线蕉影院| 久久精品免费一区二区| 久久久久国产精品嫩草影院| av色综合久久天堂av色综合在| 一本色道久久综合亚洲精品|