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);
}