• <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上有的  回復  更多評論   
             
            国产91久久综合| 99久久国产综合精品麻豆| 国产午夜电影久久| 久久黄视频| 亚洲国产成人精品91久久久 | 国产午夜精品久久久久九九| 久久久老熟女一区二区三区| 亚洲国产精品久久久久婷婷老年| 久久精品国产99久久久| 国内精品久久国产大陆| 国产精品午夜久久| 热99RE久久精品这里都是精品免费| 中文字幕热久久久久久久| 久久Av无码精品人妻系列| 国产高潮国产高潮久久久91| 人妻精品久久无码专区精东影业| 一级做a爱片久久毛片| 色狠狠久久综合网| 国产精品免费久久久久影院| 国产精品99久久久精品无码| 中文字幕精品久久久久人妻| 人妻丰满AV无码久久不卡| 亚洲国产成人久久一区WWW| 丰满少妇高潮惨叫久久久| 亚洲伊人久久成综合人影院| 爱做久久久久久| 久久狠狠高潮亚洲精品| 2021最新久久久视精品爱 | 久久男人AV资源网站| 国产精品久久久久久影院| 亚洲AV无一区二区三区久久| 国产69精品久久久久99| 久久99久久成人免费播放| 久久国产高潮流白浆免费观看| 亚洲综合精品香蕉久久网| 久久久这里有精品| 久久精品亚洲精品国产欧美| 久久99国产精品成人欧美| 四虎久久影院| 久久亚洲国产成人影院| 久久激情五月丁香伊人|