• <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>
            隨筆 - 25  文章 - 29  trackbacks - 0
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(4)

            隨筆分類(22)

            隨筆檔案(25)

            文章分類(2)

            文章檔案(2)

            相冊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 56568
            • 排名 - 405

            最新評論

            閱讀排行榜

            評論排行榜

            ????????????????????????????? 這幾天看了下模板 ,以下是個人的些心得,高手見笑了
            1.類模版 實例 對象定義 引起 實例化
            ??????????????????????????? 指針,引用 不會引起實例化
            類非型參數(shù)? 只能是 整形,枚舉,外聯(lián)結(jié),且應(yīng)為一個常量編譯時就應(yīng)確定
            ??????????????????? 浮點型,類類型,。。。都不可以
            2.class templates 的成員函數(shù) 在調(diào)用和取地址時實例化,在類實例化時不會自動實例化
            3.class templates 的友元申明
            ??? a.非模版類型
            ????????? friend class man;
            ????????? friend void f(void);
            ?????????? friend void man::f(void);
            ?? b.一對一的模版友元
            ???????????? friend class man<T>;
            ???????????? friend void f<T>( man<T>);
            ?????????????friend void man<T>::f();
            ??? c.一對多的模版友元
            ????????? template <typename T>
            ?????????????? friend class man;
            ?????????? template <typename T>
            ????????????? friend void? f( T);
            ?????????? template <typename T>
            ????????????? friend void man<T>::f();
            4.類模版的靜態(tài)成員
            ????? 并不在模版定義時實例化,在類模版實例化時實例化,對應(yīng)1個類型
            template <typename T>
            int man<T>::size=10;
            而成員函數(shù)應(yīng)為
            ? template <typename T>
            ?? void man<T>::f(void)
            {
            ..........................................
            }
            5.成員模版 可以是普通類和 模版類
            如:
            class woman????????????????????????????????????????????
            {
            public:
            ?template <typename T>
            ??class man
            ?{
            ?public:
            ??print(T a)
            ??{
            ???cout<<a;
            ???
            ??}

            ?};
            ?template <typename T2>
            ??void print(T2 a)
            ?{
            ??cout<<a;
            ?};
            protected:
            private:
            };
            ???????????????????????? 1個好的例子
            ?????????????????????????? template?<typename T>?? class A??
            ??????????????????????????????? {??????public:
            ????????????????????????????????????????????????????? template <typename T1>???????????????
            ????????????????????????????????????????????????????? A&??? operator =(const A<T1> & );
            ?????????????????????????????? }
            ???????????????????????????????如此 則A 的對象 可以用其他型的對象賦值了
            ???? 在使用時才實例化
            ??????????????????????????????????????? 但是其定義比較駭人
            ???????????????????????? template <typename T>
            ???????????????????????????????????? template<typename T1>
            ???????????????????????????????????? A<T>&? A<T>::operator=(const A<T1>& a)
            ?????????????????????????????????? {? ...........................}



            6.類模版的特化
            ????? 特化1個類模板(所有成員必須特化包括靜態(tài)類數(shù)據(jù)成員(vc),但友元模板(1:1)可以
            不特化,當(dāng)作一個顯示實參的函數(shù)模板處理即可) 或 特化1個模板 成員函數(shù)

            ?????????模板成員函數(shù)特化是定義必須出現(xiàn)在實現(xiàn)文件(cpp)中
            ?????? 語法為
            ??? void man<int>::f(void)
            {
            ............................
            }
            ??????
            類特化
            ?template <>
            class man<int>
            {
            ?????? ......//中所有類型參數(shù)以int 替代
            };
            ??????
            ??man<int>::man()
            {
            ......
            }

            void man<int>::f(void)
            {
            }
            注意? 類成員中
            ?? static const 有序類型可以在體內(nèi)初始化static const int a=10;
            ??????????????????????? 僅僅static? 必須在體外
            ?????????????????????????????????????????????????????????????? static int a;
            ????????????????????????????????????????????????????????????? int?woman::a=10;
            ???非 特化
            ?? template <typename T>
            ?? int man<T>::size=10;
            ?? 特化
            ?? int man<char>::size=10;
            7偏特化
            ?? 類模板有1個以上模版參數(shù)(類型參數(shù),非類型參數(shù))
            ????????????? 某些模版參數(shù) 被實際的型和值取代(注意是 取代 ,不是增加,減少)
            ????? 如:

            //////////////////頭文件
            ?????? template <typename T1,typename T2,int size>
            class wc
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n int T1,T2, int";
            ?}
            protected:
            private:
            };
            template <typename T,int size>
            class? wc<T* ,T,size>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T *, T ,size";
            ?}
            protected:
            private:
            };
            template <typename T,int size>
            class? wc<T* ,float,size>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T* ,float,size";
            ?}
            protected:
            private:
            };
            template <typename T>
            class? wc<T* ,float,80>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T* ,float,80";
            ?}
            protected:
            private:
            };
            ///////頭文件
            //////main()
            wc<int,float,10> wc1;
            ?wc<int* ,int ,20> wc2;
            ?wc<int*,float,39> wc3;
            wc<int*,float,80>wc4;
            ///////main() ,在vc 7 上通過
            //////main()


            8.預(yù)設(shè)模板參數(shù)(只有在類模板中才指定 ,1 .? 明確指定 a<int,int>?? ,直接定義時 man<>? kkk;2. a<T,T> )
            template <typename T,typename T1=float>
            class man
            {
            ..........
            }

            寫到這里突然想到
            ????????????????? class A {
            ????????????????????????????virtual void?? print();
            ????????????????????????????? };
            ????????????????? class B:public A {
            ????????????????????????????????????????? virtual void print();
            ????????????????????????????????????????? };
            B b;
            ???????????????? A *a =&b;
            ??????????????? a->print();//調(diào)用 B的,此時 print()中的this 指針是?B * const,使用B 的接口?;

            9.雙重模板參數(shù)(很有用)
            ??????????????? template <typename T,typename G =man<T> >
            ?class baby
            ?{
            ?public:
            ? baby ()
            ? {
            ?? cout<<"\n in baby";
            ? }
            ?protected:
            ?private:
            ?};//類型參數(shù)可以是 類類型
            ????????
            baby<int, man<float> > b;? //ok
            ////////////////////////
            template <typename T,template <typename G> class TT>//可以省略為 template <typename T? ,template<typename>??class??TT>
            ?class? son
            ?{
            ?public:
            ?? TT<T> * a;?
            ???? son()
            ??{
            ?????????? a=0;
            ???cout<<"\n in son";
            ??}
            ?protected:
            ?private:
            ?};
            ?? son<int, man> b;//則就含有了 man<int > * a;
            TT 是模板占位符號,是一個帶1個類型參數(shù)的類模板,如果其有默認(rèn)模板參數(shù) 則忽略掉??
            所以?GG若帶默認(rèn) 的模板 應(yīng)該如下
            ??????????? template <typename T, template <typename T2, typename= man<T2>? > class GG>
            class son
            {
            }

            /////////?? 類模板類型參數(shù) 同時還可以是 類模板

            10. 字符串常量在模板中的注意事項

            ?????????? char * a="hi ,friend ";///"hi, friend"? 文字常量 是 const char [10] 類型? 左值轉(zhuǎn)換到 const char *
            限定轉(zhuǎn)換到 char *,
            ??????????????? template <typename T〉
            ????? ostream& operator <<(ostream & os, const T & b);//注意只有const?才能接受臨時變量

            ???????????? cout<<"hi,friend";??
            ????????????? cout<<"bad";
            /////2個不同的模板實例
            ?? typeid(變量).name();///直接打印出變量類型
            寫到這,閑扯下:
            ??? 棧區(qū),堆區(qū),全局(靜態(tài))區(qū),文字常量,代碼區(qū),5個大區(qū),這個是我聽說的
            ////////////////////////////////////////////////
            11.模板的編譯模型
            ???? 在實例化點必須能找到定義//原則
            ?????????????????????????? 只能使用包含模式了,
            a..h. cpp?在?.h最后一行包含進 cpp
            b.?全部在h?或 cpp

            ?????????????????????分離模式,目前支持的export 關(guān)鍵字i的編譯器很少(vc.net 不支持)


            12.
            函數(shù)指針類型也能做模板類型參數(shù)

            bool ?minn( int ?a, int ?b)
            {
            ?????
            return ?a < b;
            ?}


            ?template?
            < typename?T1,typename?T2 >
            ????
            const ?T1 & ??mymin( const ?T1 & ?t1,? const ?T1 & ?t2,?T2?t3?)
            ?
            {
            ?????
            return ?t3(t1,t2) ? t1:t2;
            ?}

            void ?main()
            {
            cout
            << mymin( 2 , 3 ,minn);
            }


            13.
            模板參數(shù)可以是個類模板??
            template <typename T>
            class a
            {
            };
            a< vector <int> >;


            template <typename T, typename T2,template <typename T,typename T2> class con? >
            void add(con<T,T2>,con<T,T2>)
            {
            ?cout<<"ok";
            }

            add(a,b)//特殊在于 需要推導(dǎo),vc 7 可以從? 類模板中推導(dǎo)出參數(shù)類型

            template <typename T,template <typename T2,typename T3> class con >
            class ggoo
            {
            public:
            ?con<T,T> a;
            con<int,int> b;

            protected:
            private:
            };

            ggoo<int,double, b> kk;//b<int,double>, con 的模板參數(shù)可以任意
            ?

            posted on 2006-05-27 17:55 黃大仙 閱讀(6157) 評論(3)  編輯 收藏 引用 所屬分類: c++

            FeedBack:
            # re: 類模板(原創(chuàng)) 2007-04-11 10:50 @王一偉
            好文,哈哈,下班了慢慢看看你寫的  回復(fù)  更多評論
              
            # re: 類模板(原創(chuàng)) 2009-06-06 17:33 鳴人
            可以。  回復(fù)  更多評論
              
            # re: 類模板(原創(chuàng)) 2010-03-26 22:52 nomatter9
            謝謝了  回復(fù)  更多評論
              
            亚洲精品美女久久久久99小说| 久久久黄色大片| 久久精品99久久香蕉国产色戒| 伊人伊成久久人综合网777| 久久久国产精华液| 免费久久人人爽人人爽av| 久久人人爽人人爽人人片AV不| 久久91精品国产91久久小草| 久久无码一区二区三区少妇| 亚洲欧美日韩中文久久| 精品无码久久久久久尤物| www亚洲欲色成人久久精品| 久久久精品久久久久影院| 久久国产精品国产自线拍免费| 色诱久久av| 精品久久8x国产免费观看| 久久青青国产| 91精品国产高清91久久久久久| 久久伊人影视| 国产精品伊人久久伊人电影| 亚洲狠狠婷婷综合久久蜜芽| 久久久久99精品成人片| 久久91精品久久91综合| 囯产极品美女高潮无套久久久| 美女写真久久影院| 久久婷婷五月综合色高清| 亚洲精品高清一二区久久| 国产香蕉97碰碰久久人人| 国产精品美女久久久m| 亚洲综合伊人久久综合| 久久久久亚洲AV无码专区桃色 | 狠狠色综合久久久久尤物| 久久99国产综合精品免费| 午夜天堂av天堂久久久| 伊人久久大香线蕉亚洲五月天| 亚洲国产日韩欧美综合久久| 久久99精品免费一区二区| 国产69精品久久久久99| 97精品国产97久久久久久免费| av无码久久久久不卡免费网站 | 青青青国产精品国产精品久久久久|