• <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(函數對象)。

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

            函數對象是一個類,它重載了函數調用操作符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++中,我剛大二,并且專業(yè)也和編程關系不大,水平很淺,見笑了。。。。。。。  回復  更多評論   
            • # 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久久综合| 久久国产高潮流白浆免费观看| 久久精品人人做人人爽电影蜜月| 国产成人久久AV免费| 欧美伊人久久大香线蕉综合69| 中文国产成人精品久久不卡 | 久久亚洲中文字幕精品一区| 亚洲综合日韩久久成人AV| 久久99毛片免费观看不卡| 无码8090精品久久一区| 久久综合丝袜日本网| 婷婷国产天堂久久综合五月| 26uuu久久五月天| 欧美一区二区三区久久综合 | 久久亚洲电影| 久久r热这里有精品视频| 免费精品久久天干天干| 精品久久久久久国产牛牛app| 国产69精品久久久久9999APGF | 人妻无码久久一区二区三区免费| 久久国产免费| 青青青青久久精品国产| 国产午夜福利精品久久2021| 狠狠综合久久综合88亚洲 | 亚洲愉拍99热成人精品热久久| 2021国产成人精品久久| 久久精品国产久精国产| 国产精品99久久久久久人| 亚洲AV无一区二区三区久久| 久久免费看黄a级毛片| 久久亚洲AV无码精品色午夜 | 亚洲国产另类久久久精品小说 | 久久亚洲精品成人av无码网站| 国内精品久久久久影院老司| 精品国产日韩久久亚洲| 偷偷做久久久久网站| 久久久久久精品成人免费图片| 少妇无套内谢久久久久| 国产成人精品综合久久久| 久久午夜羞羞影院免费观看|