Introduction ttoo PPrrooggrraammmmiinngg 
LLeeccttuurree 4411
TTeemmppllaatteess
TTyyppeess ooff TTeemmppllaatteess 
 FFuunnccttiioonn TTeemmppllaatteess 
 CCllaassss TTeemmppllaatteess
vvooiidd sswwaapp (( iinntt && ii ,, iinntt && jj )) 
{{ 
iinntt tteemmpp ;; 
tteemmpp == ii ;; 
ii == jj ;; 
jj == tteemmpp ;; 
}} 
SSwwaapp FFuunnccttiioonn
FFuunnccttiioonn 
OOvveerrllooaaddiinngg
FFuunnccttiioonn TTeemmppllaatteess
template << ccllaassss TT >>
return_type function_name (( aarrgguummeenntt__lliisstt ))
EExxaammppllee 
int rreevveerrssee (( iinntt xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}} 
ddoouubbllee rreevveerrssee (( ddoouubbllee xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}}
EExxaammppllee 
template << ccllaassss TT >> 
TT rreevveerrssee (( TT xx )) 
{{ 
rreettuurrnn ((-- xx )) ;; 
}}
EExxaammppllee 
mmaaiinn (( )) 
{{ 
iinntt ii ;; 
………….. 
rreevveerrssee (( ii )) ;; 
}}
mmaaiinn (( )) 
{{ 
iinntt ii ;; 
EExxaammppllee 
…… 
rreevveerrssee (( ii )) ;; 
…… 
ddoouubbllee yy ;; 
…… 
rreevveerrssee (( yy )) ;; 
}}
CCooddee 
RReeuussee
EExxaammppllee 
template << ccllaassss TT >> 
vvooiidd sswwaapp (( TT && xx ,, TT && yy )) 
{{ 
TT tteemmpp ;; 
tteemmpp == xx ;; 
xx == yy ;; 
yy == tteemmpp ;; 
}}
iinntt aa ,, bb ;; 
cchhaarr aa ,, bb ;; 
sswwaapp (( aa ,, bb )) ;;
tteemmppllaattee << ccllaassss TT >> 
vvooiidd sswwaapp (( TT && xx ,, TT && yy )) 
{{ 
TT tteemmpp ;; 
tteemmpp == xx ;; 
xx == yy ;; 
yy == tteemmpp ;; 
}} 
EExxaammppllee
template < ccllaassss TT ,, ccllaassss UU 
>>
tteemmppllaattee <<ccllaassss TT>> 
TT llaarrggeerr (( TT xx,, TT yy )) 
{{ 
TT bbiigg ;; 
iiff (( xx >> yy )) 
bbiigg == xx ;; 
eellssee 
bbiigg == yy ;; 
rreettuurrnn (( bbiigg )) ;; 
}} 
EExxaammppllee
mmaaiinn (( )) 
{{ 
iinntt ii == 55 ,, jj == 77 ;; 
ddoouubbllee xx == 1100..00 ,, yy == 1155..00 ;; 
ccoouutt <<<< llaarrggeerr (( ii ,, jj )) <<<< eennddll ;; 
ccoouutt <<<< llaarrggeerr (( xx ,, yy )) <<<< eennddll ;; 
//// ccoouutt <<<< llaarrggeerr (( ii ,, yy )) ;; EErrrroorr 
}} 
EExxaammppllee
tteemmppllaattee <<ccllaassss TT>> 
vvooiidd iinnvveerrssee (( TT && xx ,, TT && yy )) 
{{ 
TT tteemmpp ;; 
tteemmpp == xx ;; 
xx == yy ;; 
yy == tteemmpp ;; 
}} 
EExxaammppllee
EExxaammppllee 
tteemmppllaattee <<ccllaassss TT>> 
TT iinnvveerrssee (( TT xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}}
EExxaammppllee 
mmaaiinn (( )) 
{{ 
iinntt ii == 44 ,, jj == 88 ;; 
iinnvveerrssee (( ii ,, jj )) ;; 
iinnvveerrssee (( ii )) ;; 
}}
EExxaammppllee 
tteemmppllaattee <<ccllaassss TT>> 
TT rreevveerrssee (( TT xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}} 
vvooiidd mmaaiinn (( )) 
{{ 
ddoouubbllee aa == 1100..7755 ;; 
rreevveerrssee (( aa )) ;; 
rreevveerrssee <<iinntt>> (( aa )) ;; 
}}
EExxaammppllee 
template <<ccllaassss TT ,, ccllaassss UU>> 
TT rreevveerrssee (( UU xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}}
EExxaammppllee 
mmaaiinn (( )) 
{{ 
ddoouubbllee aa == 88..88 ;; 
rreevveerrssee (( aa )) ;; 
rreevveerrssee <<iinntt>> (( aa )) ;; 
rreevveerrssee <<iinntt ,, ddoouubbllee>> (( aa )) ;; 
rreevveerrssee<<ddoouubbllee ,, ddoouubbllee>> (( aa )) ;; 
rreevveerrssee<<ddoouubbllee ,, iinntt>> (( aa )) ;; 
}}
EExxaammppllee 
ccllaassss PPhhoonneeCCaallll 
{{ 
pprriivvaattee :: 
iinntt lleennggtthhOOffCCaallll ;; 
cchhaarr bbiillllCCooddee ;; 
ppuubblliicc :: 
PPhhoonneeCCaallll (( ccoonnsstt iinntt ii ,, cchhaarr bb )) ;; 
PPhhoonneeCCaallll (( PPoonneeCCaallll & pp )) ;; 
PPhhoonneeCCaallll PPhhoonneeCCaallll :::: ooppeerraattoorr -- 
(( vvooiidd )) ;; 
vvooiidd ddiissppllaayy (( vvooiidd )) ;; 
}} ;;
EExxaammppllee 
tteemmppllaattee <<ccllaassss TT>> 
TT rreevveerrssee (( TT xx )) 
{{ 
rreettuurrnn (( -- xx )) ;; 
}}
EExxaammppllee 
PhoneCall reverse (( PPhhoonneeCCaallll xx )) 
{{ 
rreettuurrnn ((-- xx )) ;; 
}}
EExxaammppllee 
PhoneCall PhoneCall :: ooppeerraattoorr -- (( vvooiidd {{ 
PPhhoonneeCCaallll tteemmpp (( * tthhiiss )) ;; 
tteemmpp..bbiillllCCooddee == ''CC'' ;; 
rreettuurrnn (( tteemmpp )) ;; 
}}
EExxaammppllee 
mmaaiinn (( )) 
{{ 
PPhhoonneeCCaallll aa (( 1100 ,, ‘‘SS’’ )) ;; 
aa..ddiissppllaayy (( )) ;; 
aa == rreevveerrssee (( aa )) ;; 
aa..ddiissppllaayy (( )) ;; 
}}

CS201- Introduction to Programming- Lecture 41