• <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>
            隨筆 - 181  文章 - 15  trackbacks - 0
            <2007年9月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            My Tech blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            最近開始系統學習STL.首先找到這本書--The C++ Standard Library : A Tutoral and Reference然后一邊看書一邊找著里面的例子做做.個人認為比較重要的內容將會在這里進行記錄.
            與此相關的閱讀和實驗過程都是在linux下進行的,所以這些讀書筆記也會在linux下完成.這里不由得感嘆一下--博客園的博客系統的通用性確實做得非常好,至少我在fire fox下面下使用沒有感覺到任何的差別.
            首先是模板Template.
            template<class T> 
            class MyClass
            {
            private:
            T value;
            public:
            const T getValue()
            {
            return value;
            }
            void assign(const MyClass<T> &m)
            {
            value
            =m.value;
            }

            MyClass(T theValue)
            {
            value
            =theValue;
            }

            };

            上面的MyClass就是我的模板類.然后我按照如下的方式進行調用,是沒有問題的:
            MyClass<int> i1(1);
            MyClass
            <int> i2(2);
            cout
            <<"\n";
            cout
            <<i1.getValue()<<"\n";
            cout
            <<i2.getValue()<<"\n";
            i1.assign(i2);
            cout
            <<i1.getValue()<<"\n";
            exit(
            0);
            但是如果這樣,就會出現問題.
            MyClass<int> i1(1);
            MyClass
            <float> f3(3.9);
            f3.assign(i1);
            編譯器會告訴你:
            TemplateExp.cpp: In function ‘int main()’:
            TemplateExp.cpp:36: 錯誤: 對 ‘MyClass<float>::assign(MyClass<int>&)’ 的調用沒有匹配的函數
            TemplateExp.cpp:13: 附注: 備選為: void MyClass<T>::assign(const MyClass<T>&) [with T = float]
            因為在編譯器看來
            void assign(const MyClass<int> &m)和
            void assign(const MyClass<float> &m)是不同的.
            這樣就必須assign進行修改.我在這里建立了一個新的函數assignX,如下:
            template <class X>
            void assignX(MyClass<X> &m)
            {
            value
            =m.getValue();
            }
            在調用的時候 這樣寫就沒有問題了:
            MyClass<int> i1(1);
            MyClass
            <float> f3(3.9);
            f3.assignX(i1);
            cout
            <<f3.getValue()<<"\n";
            exit(
            0);
            有一點需要注意,在assignX中,不能夠只接使用m.value而要使用m.getValue().正如書中所說:
            Note that the argument x of assign() now differs from the type of *this. Thus, you can't
            access private and protected members of MyClass<> directly. Instead, you have to use
            something like getValue() in this example.
            由于類型不同了(即MyClass<float>不同于MyClass<int>)所以就不能使用this.因而要另外建立一個獲取值的函數.
            實際上上面寫的代碼和書中還是有所不同的.比較重要的區別是函數assign.
            書中的參數為:
            template<class X>
            assign(const MyClass<X>& x)
            這樣實際上是不能得到x.getValue()的.編譯器會給出這樣的提示:
            TemplateExp.cpp:36:   instantiated from here
            TemplateExp.cpp:20: 錯誤: passing ‘const MyClass<int>’ as ‘this’ argument of ‘const T MyClass<T>::getValue() [with T = int]’ discards qualifiers
            但是修改成
            template<class X>
            assign(MyClass<X>& x)
            就不會有問題了
            posted on 2007-06-09 23:53 littlegai 閱讀(244) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
            色老头网站久久网| 精品多毛少妇人妻AV免费久久| 亚洲国产精品成人AV无码久久综合影院| 欧美日韩中文字幕久久伊人| 国产午夜福利精品久久| 久久综合九色综合久99| 婷婷久久五月天| 国产精品久久久久久吹潮| 国产成人精品久久亚洲| 久久99精品久久久久久不卡 | 亚洲欧美国产日韩综合久久| 国产99久久久国产精品小说| 久久久久久久久无码精品亚洲日韩 | 久久美女网站免费| 青青草原综合久久大伊人导航| 色婷婷综合久久久中文字幕| 久久精品男人影院| 亚洲成色www久久网站夜月| 99久久综合国产精品二区| 精品熟女少妇AV免费久久| 国产精品99久久不卡| 久久精品中文字幕无码绿巨人| 久久99精品免费一区二区 | 亚洲AV无码一区东京热久久| 精品无码人妻久久久久久| 成人免费网站久久久| 99精品国产免费久久久久久下载| 亚洲狠狠久久综合一区77777 | 久久精品国产亚洲av麻豆图片 | 久久亚洲国产精品一区二区| 亚洲精品无码久久久久sm| 欧美大战日韩91综合一区婷婷久久青草| 久久99精品久久只有精品| 久久人人添人人爽添人人片牛牛| 久久99精品国产麻豆婷婷| 久久伊人亚洲AV无码网站| 精品九九久久国内精品| 精品久久久久久无码中文字幕一区 | 久久久久亚洲av毛片大| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久久亚洲欧洲日产国码aⅴ|