// CTemp.cpp : Defines the entry point for the console application.
//
#include " stdafx.h "
#include < iostream >
using namespace std;
template < class T1 , class T2 >
class CTemp

{
public :
// constructor of no arguments
CTemp()

{
// m_t1=0;
// m_t2=0;
} ;
// constructor of arguments
CTemp(T1 t1,T2 t2)

{
m_t1 = t1;
m_t2 = t2;
} ;
// the copy constructor
CTemp( const CTemp & value)

{
m_t1 = value.m_t1;
m_t2 = value.m_t2;
}
// the deconstructor
~ CTemp()
{ } ;
// overloading operator +, it can a CTemp class add a int variable
CTemp operator + ( const int & temp );
// overloading operator +, it can add two CTemp object
CTemp operator + ( const CTemp & temp );
// overloading operator +, it can a CTemp class subtract a int variable
CTemp operator - ( const int & temp );
// overloading operator=,it can reliaze assigment
CTemp & operator = (CTemp < T1,T2 > & temp5 );
void OutPutmt1();
private :
T1 m_t1;
T2 m_t2;
} ;
template < class T1, class T2 >
CTemp < T1,T2 > CTemp < T1,T2 > :: operator + ( const int & temp)

{
CTemp < T1,T2 > results1( 0 , 0 );
results1.m_t1 = results1.m_t1 + temp + m_t1;
return results1;
}
template < class T1, class T2 >
CTemp < T1,T2 > CTemp < T1,T2 > :: operator - ( const int & temp)

{
CTemp < T1,T2 > results;
results.m_t1 = results.m_t1 - temp;
return results;
}
template < class T1, class T2 >
CTemp < T1,T2 > & CTemp < T1,T2 > :: operator = (CTemp < T1,T2 > & temp5)

{
m_t1 = temp5.m_t1;
m_t2 = temp5.m_t2;
return * this ;
}
template < class T1, class T2 >
void CTemp < T1,T2 > ::OutPutmt1()

{
cout << m_t1 << endl;
}
template < class T1, class T2 >
CTemp < T1,T2 > CTemp < T1,T2 > :: operator + ( const CTemp < T1,T2 > & temp )

{
CTemp < T1,T2 > results1( 0 , 0 );
results1.m_t1 = results1.m_t1 + temp.m_t1 + m_t1;
results1.m_t2 = results1.m_t2 + temp.m_t2 + m_t2;
return results1;
}
// the return is class T1
template < class T1, class T2 >
T1 Add(T1 t1,T2 t2)

{
T1 temp = t1;
t1 = t1 + t2;
T1 result = t1;
t1 = temp;
return result;
}
int _tmain( int argc, _TCHAR * argv[])

{

CTemp < int , int > A( 10 , 20 );
CTemp < int , int > B( 30 , 30 );
CTemp < int , int > C(A);
B = A;
A = (A + 50 );
A.OutPutmt1();
B.OutPutmt1();
C.OutPutmt1();
CTemp < char , char > D( ' a ' , ' b ' );
D = D + 2 ;
D.OutPutmt1();
CTemp < int , int > E( 0 , 0 );
E = Add(A, 20 );
E.OutPutmt1();
CTemp < char , char > F( ' A ' , ' b ' );
CTemp < char , char > G( ' 1 ' , ' b ' );
F = F + G;
F.OutPutmt1();
return 0 ;
}




































































































































