c++テンプレートクラス

19891 ワード

原文:https://zhidao.baidu.com/question/1896673576873482820.html template   class   _T > class   CString { public :      CString( );      virtual   ~ CString( );
  protected :      _T * string;      size_t   capacity;      size_t   len; };
のコードは テンプレートクラスを し、 のように します.
1
2 CString char   > ascii_string; CString wchar_t   > wild_string;
テンプレートの は、1つのタイプに なく、 に するデータ を することです. えば、 には、ASCII に する1バイト と、UNICOD に するマルチバイト の2 がありますが、2つの の インタフェースは じで、 の さを めることができます.いずれも ポインタを することができ、 きインデックスを うことができ、 に することができますが、わざわざ2つのクラスを してそれぞれ2つの を すのはもったいないので、クラステンプレートが れました. たちは1つのクラステンプレートを するだけで、2つのタイプの を すことができます.
template<class T1,class T2,class T3>
  T1 sum(T1 a,T2 b,T3 c){
      return a+b+c;
  }
int main(int argc, char *argv[])
{
    cout<double,short,int>(1.1,3,257)< 
  

}

, test , MyData :

#include
#include
#include
#include
#include
using namespace std;
 
  
template <class T1=int , class T2=float>
class MyData{
    public :
        MyData();
        MyData(T1 a , T2 b );
        MyData(T1 a , T1 b ,T1 c) ;
        ~MyData();
    private :
};
 
  
template <class T1=int,class T2=float>
class Test
{
public:
    Test();
    Test(T1 d1, T2 d2);
    template <class U,class V> Test(const Test<U,V> &t);
    void SetData1(T1 val)
    {
        data1=val;
    }
    void SetData2(T2 val)
    {
        data2=val;
    }
    T1 GetData1()
    {
        return data1;
    }
    T2 GetData2()
    {
        return data2;
    }
private:
    T1 data1;
    T2 data2;
};
 
  
 
  
template <class T1,class T2>
Test<T1,T2>::Test() {}
 
  
 
  
template <class T1,class T2>
Test<T1, T2>::Test(T1 d1, T2 d2):
    data1(d1),data2(d2) {}
 
  
 
  
template <class T1,class T2> template <class U,class V>
Test<T1, T2>::Test(const Test<U,V> &t):
    data1(t.data1),data2(t.data2) {};
 
  
 
  
int main(int argc, char *argv[])
{
//    MyData obj2(4, -2);
    Test <int,double> t1(10, 5.4);
    cout<"   "< 
  
    Test <int,double> t2(t1);
    cout<"   "< 
  

: :

#include
#include
#include
#include
#include
using namespace std;
 
  
template <class T1=int , class T2=float>
class MyData{
    public :
        MyData();
        MyData(T1 a, T2 b);
        MyData(T1 a , T1 b ,T1 c) ;
//        ~MyData();
    private :
        T1 data1;
        T2 data2;
};
template <class T1,class T2>
MyData<T1, T2>::MyData(T1 d1, T2 d2):
    data1(d1),data2(d2) {}
int main(int argc, char *argv[])
{
    MyData<int,double> obj2(4, -2.1);
}