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




































































































































