欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
類(lèi)模板(原創(chuàng )) - c++探索 - C++博客
            這幾天看了下模板 ,以下是個(gè)人的些心得,高手見(jiàn)笑了
1.類(lèi)模版 實(shí)例 對象定義 引起 實(shí)例化
                            指針,引用 不會(huì )引起實(shí)例化
類(lèi)非型參數  只能是 整形,枚舉,外聯(lián)結,且應為一個(gè)常量編譯時(shí)就應確定
                    浮點(diǎn)型,類(lèi)類(lèi)型,。。。都不可以
2.class templates 的成員函數 在調用和取地址時(shí)實(shí)例化,在類(lèi)實(shí)例化時(shí)不會(huì )自動(dòng)實(shí)例化
3.class templates 的友元申明
    a.非模版類(lèi)型
          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.類(lèi)模版的靜態(tài)成員
      并不在模版定義時(shí)實(shí)例化,在類(lèi)模版實(shí)例化時(shí)實(shí)例化,對應1個(gè)類(lèi)型
template <typename T>
int man<T>::size=10;
而成員函數應為
  template <typename T>
   void man<T>::f(void)
{
..........................................
}
5.成員模版 可以是普通類(lèi)和 模版類(lèi)
如:
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個(gè)好的例子
                           template <typename T>   class A  
                                {      public:
                                                      template <typename T1>               
                                                      A&    operator =(const A<T1> & );
                               }
                               如此 則A 的對象 可以用其他型的對象賦值了
     在使用時(shí)才實(shí)例化
                                        但是其定義比較駭人
                         template <typename T>
                                     template<typename T1>
                                     A<T>&  A<T>::operator=(const A<T1>& a)
                                   {  ...........................}



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

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

void man<int>::f(void)
{
}
注意  類(lèi)成員中
   static const 有序類(lè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偏特化
   類(lèi)模板有1個(gè)以上模版參數(類(lèi)型參數,非類(lèi)型參數)
              某些模版參數 被實(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 上通過(guò)
//////main()


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

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

9.雙重模板參數(很有用)
                template <typename T,typename G =man<T> >
 class baby
 {
 public:
  baby ()
  {
   cout<<"\n in baby";
  }
 protected:
 private:
 };//類(lèi)型參數可以是 類(lèi)類(lèi)型
        
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 是模板占位符號,是一個(gè)帶1個(gè)類(lèi)型參數的類(lèi)模板,如果其有默認模板參數 則忽略掉  
所以 GG若帶默認 的模板 應該如下
            template <typename T, template <typename T2, typename= man<T2>  > class GG>
class son
{
}

/////////   類(lèi)模板類(lèi)型參數 同時(shí)還可以是 類(lèi)模板

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

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

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

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


12.
函數指針類(lèi)型也能做模板類(lèi)型參數

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.
模板參數可以是個(gè)類(lèi)模板  
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)//特殊在于 需要推導,vc 7 可以從  類(lèi)模板中推導出參數類(lèi)型

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 的模板參數可以任意
 


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
STL模板c++類(lèi)模板的通用版本局部特化和完全特化
C 模板詳解(一)
函數模板 類(lèi)模板
模板的全特化與偏特化
類(lèi)模板中的友元聲明和定義
C++
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久