// template.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime> // std::time
#include <cstdlib> // std::rand, std::srand
using namespace std;
//类模板/////////////////////////////////////////////////
template<class T1,class T2>
class myClass{
private:
T1 I;
T2 J;
public:
myClass(T1 a, T2 b);//Constructor
void show();
T1 Sums();
};
//这是构造函数 ,注意这些格式
template <typename T1,typename T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b)
{}
//这是void show();
template <typename T1,typename T2>
void myClass<T1,T2>::show()
{
cout<<"I="<<I<<", J="<<J<<endl;
}
//这是Sums函数
template <typename T1,typename T2>
T1 myClass<T1,T2>::Sums()
{
return I;
}
////////////////////////////////////////////////////////
template<class A,class B>
class CTemplate
{
private:
A aa;
B bb;
public:
CTemplate(A a, B b);
void setdata(A n1,B n2);
A getdataA();
B getdataB();
};
template<typename A,typename B>
CTemplate<A,B>::CTemplate(A a, B b):aa(a),bb(b)
{}
template<typename A,typename B>
void CTemplate<A,B>::setdata(A n1,B n2)
{
aa = n1;
bb = n2;
}
template<typename A,typename B>
A CTemplate<A,B>::getdataA()
{
cout<<"aa:"<<aa<<" "<<endl;
return aa;
};
template<typename A,typename B>
B CTemplate<A,B>::getdataB()
{
cout<<"bb:"<<bb<<" "<<endl;
return bb;
};
//函数模板//////////////////////////////////////////////
template <typename T1, typename T2>
void FunctionTemplate(T1 a, T2 b)
{
cout<<"a:"<<a<<" "<<"b:"<<b<<endl;
}
////////////////////////////////////////////////////////
}int _tmain(int argc, _TCHAR* argv[])
{
myClass<int,int> class1(3,5);
class1.show();
myClass<int,char> class2(3,'a');
class2.show();
myClass<double,int> class3(2.9,10);
class3.show();
myClass<float,float> class4(3.1,2.5);
float ff=class4.Sums();
cout<<"ff:"<<ff<<endl;
///////////////////////////////////////////////////
CTemplate<int, int> o_Tmeplate1(1,2);
//o_Tmeplate1.setdata(3,4);
o_Tmeplate1.getdataA();
o_Tmeplate1.getdataB();
CTemplate<float,float> o_Tmeplate2(2.003,3.001);
o_Tmeplate2.getdataA();
o_Tmeplate2.getdataB();
///////////////////////////////////////////////////
int a =3 ;
int b = 5;
FunctionTemplate(a,b);
double d =3.3 ;
double c = 5.5;
FunctionTemplate(d,c);
///////////////////////////////////////////////////
system("PAUSE");
return 0;
}