Chapter 4
Compound Types
4.1 Structs
"!$#&%('*)+)-,/.0#1'324!6587924:<;='*>*>?>@,BADC0!E#&%(CF,G,H.G24!I./,3JK#&)8L-24CNMO,GC0'*P'Q!SRT!I,F;#17UJ6,F)VLGCF24W
,BXD'1)F#1'Q!SR#17UJ6,F)ZY[\,])G%S24;^%S24;`_3acb"dOeGa"_+ADCG,f:g)-,/M#c2hR4CG24:J$MiAj#3AHAD!Mk#c2H2(lm#3AD'Q!
!I,F;n#17UJ6,F)o;='1#&%pA0JiJK>q'3./Aj#1'r24!?s3)rJS,G.F'ut.vL/:g!I.0#1'r24!Aj>w'*#179Yyx24:\;='*>*>Aj>w)-2z)-,G,{%S24;
|}6~ bZa | b |mD~ b" | -O
O\./AD!%S,0>Jy'Q!WzAj-'*!SR!I,F;n#17UJ6,F),BAj)G7AD!Mz'Q!?#1:g'1#1'QP(,o#c2
:g)-,-Y
d 9
} }S| _ ~=~ -
jafa | dO_ ~ CGAj#1'324!Aj>8!6:WlF,GCm)o
} b | b-S1 ~ ?
d9 ~ bc_ |4 a" ~| b"
b acza" ~
d9 ~ bZa | b
-
Oa" ~ ~
| T
9Za | b
Ub
a ~ ~ b"_Ff | ~ _]
| a
n/d ~ ~ |
n
d ~
9 D~ d9
O9- ~
ja-ga¢¡ }6~+| bbZa" |
Z6
dO ~ b"_Fi_ |=~ 9 D~ a | } ~ ~
a8£a | dib"_ ~ D~ _F
¤ ~ e | dO |4 e | dib"_ ~ b ~/} b ~ _ ~
ja¥bZa" |
9-¦
dO ~ b+_c } ¡z ¡a =| -d ~ _ |4 a¢¡ }6~
int
9dia
a"O_ =| dO
| a ~
z
~+ ac | dOb }6~ b"e ~/} ac |
|4 ac ~ b"Za" |
9-K
dO ~ b"_Z_NO_3a"
OeGa
HZa" ~ HUa"e0-§e |
Oe ~G} a0¨= ~ a =|
d9 ~ bc_
-
O
O¥a | ~ a" ~ bcªi-
O$ac9__h-_ |
n
d © ~ |
b ~G«9~ e/a ~ <
HZac ~ HZa"e0ZK
| aUa" |
?¬ac ~ _3¡ | I | b]a" ~ _ ~ a |4 bZa" |
Z
dO ~ b"_
OO£®
e0Za ~ _
a"9Za =~ Zb ~ ~ Z
O £a"zkHZa" ~ HZace0-Sa¢¡ }S~ 6 ~G¯
~ z¡a"_ -d ~ bZ
9 ~ AD!Mac_
dO
OeGa" |
9-£a°¡z±1_ ~F~ ~ eGa" |
² D³
´1 ~ Z¡D =~=| dOµ ~ a | ~ afTf¶a¢¡ }6~ a"9Za
e0-
~
dO_ ~ zµ ~~B· _3ac
OTZb"ac9 ~ a"ea¢¡ }6~ _G¸Sa" ~| |m
O } ~ e ~h|4 e | ~ ± | bf-O9
9¹a =| b"Za" |
9-
dO ~ b"_ ³ _3 |m _ |U a"O_=e | dO¥ | | µH£µ ~
// input
std :: cout < < " Rational number r :\ n";
rational r ;
std :: cin > > r;
std :: cout < < " Rational number s :\ n";
rational s ;
std :: cin > > s;
// computation and output
std :: cout < < " Sum is " < < r + s < < " .\ n" ;
v |ºg~ b"_T_ ~/D~ b-e |
Oe ~/} ac_ |
_ ~ /e a" |
? =~
acb | OdOe ~ a" ~ e |
Oe ~G}
|4 O ºS~ b ~
aNa¢¡ }6~ _N
ja |½|
~¥ -d
HZa" ~ HUa"e0-Sa¢¡ }6~ ¾-_]N
~G
¯ b"_3a_3a ~G} a |U Ub"¥a" ~ ~ _cb ~ } ~
Á
bH ~G¯
O
O
~G a¢¡ }6~ _N-_ ~ |
~/· _3a"
Oa¢¡ }6~ _F´1
yac9_
a |4 )F#1C0:».0#&)F¼^_3a3b"dOeGa8_dO_ ~ Ta | -4b ~ DZa ~ _ ~GD~ bZ Zd ~ _
~|4 <
~G a°¡ }6~ ^¤yac\a"O_F =~ e0-
~ Z_c¡ | ~ =a" ~
a°¡ }6~
fh+¿ ~ b ~ _] =| bcµ(
9 } b | b"-Àa"9Za]HZµ ~ _
e ~f|4 e | ~ Z |mD~
Ã
// Program : userational. C
// Add two rational numbers .
# include < iostream >
Æ
// the new type rational
struct rational {
Â
ÄÅ
\KI8I
int n;
int d ; // INV : d != 0
Á
0Á Á
Á"Â
Á"Ã
Á3ÄÅ
Á
Á"Æ
Á
Á
Á
 Â4Á
Â0Â
Â0Ã
ÂGÄÅ
Â
Â0Æ
Â
};
// POST : return value is the sum of a and b
rational add ( rational a , rational b)
{
rational result ;
result . n = a.n * b .d + a.d * b.n;
result . d = a.d * b .d;
return result ;
}
int main ()
{
// input
std :: cout < < " Rational number r :\ n";
rational r;
std :: cout < < " numerator =?
" ; std :: cin > > r.n ;
std :: cout < < " denominator =? " ; std :: cin > > r.d ;
Â
std :: cout < < " Rational number s :\ n";
rational s;
std :: cout < < " numerator =?
" ; std :: cin > > s.n ;
std :: cout < < " denominator =? " ; std :: cin > > s.d ;
Â
Ã
à Á
4
Ã0Â
Ã0Ã
ÃGÄÅ
// computation
rational t = add (r , s );
Ã
Ã0Æ
Ã
// output
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < " .\ n ";
Ã
Ã
Ä
return 0;
}
J?CF2/RD)?:S)Z,FCGAj#1'324!Aj>Y
Program 30:
´1
pvh8_3a3b"dOeGa ~/¯
~ _
~G a¢¡ }S~o | _ ~N -d ~ bZ
9 ~ _ac ~ ADCm#c,0)G'°AD!yJ?CF2ZMD:§.0#
|4 ¯i·i~ z
dO ~ b 4
| a¢¡ }6~ _F´1
| dibeF-_ ~ =~ ~G¯
~ N
~G a¢¡ }6~
9- ~ rational | _ ~
-d ~ bZ
9 ~ _a" ~ =
Zbca ~ _c-
} b | OdOeGa
b
ja ~ b } b ~ a -d ~
-_a" ~
int int ~ ~+=~
(n, d)
d | a" ~
a
n/d
Oe ~ a" ~ b ~ _
| a¢¡ }6~| b=a" ~ ~
| T
9Za | b a"Ta" ~ }O} b |} b"Ua ~ -d ~ b-
O ~
int\{0}
_
F
e
N
¡
c
a
b
O
d
b
a
N
¡
H
"
b
H
6
*
'
6
!
P
D
A
0
C
r
'
D
A
?
!
&
#
i
f
e
O
9
£
"
a
k
"
a
9
Z
8
a
Z
V
_
a
=~ }S~
~ ~ ~ ~
|
|
|
| |
d=
0
V
b
(
D
(
e
9
9
Z
"
a
O
_
Z
d
F
_
O
d
e
T
k
Z
"
b
j
I
a
_
O
O
0
e
Z
a
h
¹
¡
e
T
a
3
_
a
Zbcac
O
|
~
|
|
|49
~
~
|
~
!"$#&%(')+*"*"),".-
/0,123
45#&6'87!9#:70;<,6#&%=6#?>A@*6BC.-D(#E)F@D)+"$G*"B.HI>J7K')LEHMB
*8N#E")+.>O
£a"
// INV:
K£µ ~} b ~ ®SZ
9 }6| _3a"e |
9Oac |
O_ |4 dO
OeGa" |
9_±1_ ~F~ ~ eGa" |
(²² ³ U
Zb"-
ja"_?Zb ~ -
v
| b"H-
F ¡ |4 | eFdO ~
ac
O=ac ~¦} b | b-¸Ua" ~ ¡Ub ~
| a»_3a-
O9Zb"O ~ K--
O | dib F¡ |4 b"£a"
O a" ~
_ |
~f}6| _3_c9 ~ e |
D~
a" |
?
¨ ~ a¢¡ }6~
_ b ~G~ bcb ~ a | -_T)F#1C0:§.F#&Z
9{a=e0-
{ ~ d9_ ~ µ ~ -
j¡ | a" ~ b=a¢¡ }6~ ¸
rational
b
(
a
H
0
o
¡
| ~/·
} ~
}9}S~ Zb-_ } Ub- ~ a ~ ba¢¡ }6~ Z
9{b ~ a"dib"
¥a¢¡ }6~
dO
OeGa" |
O_µ ~ add
A struct defines a type, not variables.
~ 4
9
O
Oi¨= ~ ~G¯
Oa" |
~ a _V ~ a8b" |46|
~}6| _c_c9 ~ e |
dO_c |
Nb"4a b | ¾a" ~
struct rational {
int n ;
int d ; // INV : d != 0
};
OO ~
| ~ _!I2D# ~G¯
~¹ Zb"U ~ _ n -
O d |4 a¢¡ }6~ int »-a" | dO4a" ~ a =| T
Zb"Z9 ~ ~ eGZbZac |
O_-_ =~ µ(
|U ac ~ Za" ~ b0?- | dibv
~ _
a | ~ "a ~ bf ~G¯
a" ~
9- ~
9diaZa8acUa }6|
ja0
~ £a" ~ b Zb"Z9 ~|4 ac
Ua
~G a¢¡ }S~ (
rational
|4 a¢¡ }6~ int 9 D~ ~F~
~G¯
~ ?V¨= ~ a =| T9O ~
~ _
int n ;
int d ; // INV : d != 0
_ || µµ ~
~ v
~ #17mJ6, |4
| b Ub"Z9 ~ _
_6
} ~ eF ¡kacUa -
j¡T-eGacdZ2(l
-,G.0# |4 a" ~
~G a¢¡ }6~ ±*1 ~ Z
¡Ne |
9e/b ~ a ~ bUa" |
9-O
dO ~ b ³ © 9-_cª
±1_b ~G} b ~ _ ~
ja ~ ¡ ³ a =|]| ~ e/a"_ |4 a¢¡ }6~
a"9ZaIeF-
~ ZeFe ~ _c_ ~ ka"ib | dO4ha" ~
Z ~ _ -
O
int
n
¸O_ ~F~ a" ~ ~ ~ b=-e ~ _c_ ~ |m ¦¨O_=_ }S~ eF ¯ e0Zac |
H_= }6| bcaZ
a8 K=~ -
jaa | } ~ ~
a
d
|}6~ b"Za" |
O_ |
| dib
~G a¢¡ }6~ £µ ~
{a" ~f d9
OeGac |
add
¿ ~ b ~ _VZ
H-
9- | ¡ | bVac ~ _ca"d9Zac |
?I´ a" ~ dO
O D~ bc_ca¢¡¹-OT
O_3acbUa" |
-
ja"_a | _ }6~ eF ¡
|U +_3a"dO ~
a_b ~G} b ~ _ ~
a ~ {
Ha" ~ b ¯ ~ _G a" ~ ¡TT4jaVe | ~ d }{ a"Ta"ib ~F~
} ~ e ~ _ |4 9Za"
a"9Za¹Zb ~
~ e ~ _c_cZbc¡S¬¥z
9- ~ V-
~
ac ¯ e0Za" |
$
d9 ~ bF8-
O\ } b | b- |4 _ra"dOO¡D¨=9_
~G¯
~ _Va" ~ a¢¡ }S~ ª |4 +_3acd9 ~
ja -
Oo- |U _ dO
OeGa" |
Za¢¡o±*b ~ 4_racbZa" |
K4e9-
O ~
|4S} b | bZ
©
|4 _ra"dOO¡D ~ ace ³ a | ~ b ~ Z ~ ?i |
O ~F| b ~ -
¡o_3acd9 ~
ja"_-eGa"d9-£¡T_c |U d }
4.1.1 Struct definitions.
´1
~
~ b"-1O_3acb"dOeGa ~G¯
9£a" |
o | | µ _Z_ | U| _F
struct
. ¸
F
¸
£
IB ¸
¸
\KI8I
¿ ~ b ~ _+a" ~
9- ~k|4 a" ~
~/ ¡
a3b | OdOe ~ $_3acbcd9e/aT±*a"O_
9- ~ ¹dO_3av ~ -
$ ~
ja" ¯9~ b0
~ eGac |
² D³ O-
O F FG0 I Ub ~
9- ~ _ |4~B· _3ac
Oa¢¡ }S~ _F ¨= ~ _ ~ Ub ~ e0Z ~ oa" ~ :g!MO,GCms
>q7'Q!SRz#17UJ6,F) |4 6¨= ~ ~
a" ¯~ b"_ . BF0 / Zb ~ Zb ~ a" ~ MiAj#3AW,FWlG,FCm)
|4 ac ~
~G a¢¡ }6~
¨ ~ Zd ~ b-
O ~|4 _ I 8¨O_H ~ -
O_F Zd ~z|4 a¢¡ }6~ _H-
... ®*a"d } ~
b
N
(t1 , t2 , . . . , tN ) ~ ~ ti
3
_
"
a
9
o
¢
a
¡
3
_
ª
T
4
a
O
d
O
Z ~
aZa¢¡ }6~ _FKdia-_ | d9_ ~ b3®& ~G¯
~ ½a¢¡ }6~ _F | b ~/· ®
}6~
~k
© ·
- } ~ De |
O_c ~ bVa" ~D~ eGa | b _ } -e ~ 3 |UD~ b a" ~¯9~ o
f D~
Na" ~ a¢¡ }6~
-_8Z |UD~
rational
e
O
d
6
_
F
_
=~ |
| ~
| |U
3
struct rational_vector_3 {
rational x;
rational y;
rational z;
};
¼
a" | dO4¥£a | |U _ b
~F~
| a ~ a" ~ "_ - ~ ]¿
e0-
~
unsigned int =~
a" ~ ~G¯ O
a" |
| b~ ~ _]-
~/· Z }
a Zbc-
a |4 ac
K ~ ad9_HZµ ~ a ~/·(} eGa0¬a" ~ a¢¡ }S~ _ F FG0 I
~ ¬´
_
a" ~ -d ~ b-
O ~h|4 a" ~ a¢¡ }6~
0, 1, . . . , U
~ a¢¡ }6~ int ac -d ~ b-
O ~
{−U, −U + 1, . . . , −1, 0, 1, . . . , U − 1, U}
- _ | |m _F
struct extended_int {
// represents u if n == false and -u otherwise
unsigned int u ; // absolute value
bool
n ; // sign bit
};
¨
=
~ -d ~ b"-
O ~h|4 a"O_a¢¡ }6~ _ {0, 1, . . . , U} { } 9dia]µ ~
a" ~ bZa" |
Z»e0Z_ ~
=~
a ~ b } b ~ a -d ~ _O ºS~ b ~
a"£¡S¬ Zd ~ (u, n) © ~ Z
9_3ª u n = -
O −u n =
< a =| _3acb"dOeGa] ~G¯
Oa" |
O_ D~ a" ~ _"- ~ W<,FWzlF,FC{)rJ6,/.F' t.BAj#1'324!±*a" ~} Zbca |4 a" ~
D~
~G¯
Oa" |
~
OeF | _ ~ $
½eGdObc¡<Ob-e ~ _ ³ §ac ~ ¡ ~G¯
~ MD'h,FCG,F!?#ha°¡ }6~ _FZ
9½£a_v
| a }6| _c_c£ ~
a | b ~G} Ze ~|
~| bHa" ~| a" ~ b0 |
9_3 ~ bNa"O_ka3b" -9diaH
O_3acbcd9e/a" D~~/· - } ~{ a"\a =|
}O} Zb ~
ja"¡ ~ d9-?_3acb"dOeGa"_ ~G¯
~ |UD~ b-
~ } a¢¡H_ ~ a |4~B· _3ac
Oa¢¡ }S~ _F
struct S {
};
struct T {
};
void foo ( S s ) {}
int main () {
S s;
T t;
foo ( s ); // ok
foo ( t ); // error : type mismatch
return 0;
}
´*a=_=-_ |}6| _c_c9 ~ a | d9_ ~ ZbcbF¡T ~ ~ bc_V
H_3acbcd9e/a"_F | b ~B· - } ~ Da" ~¯9~ {
9 D~ OeFdO_c_ ~ Z |mD~ e | 9
d -a ~ b"
9Za" D~ £¡k ~ | ~ ~ H£µ ~ "a O_G
3
acUa =~
struct rational_vector_3 {
rational v [3];
};
4.1.2 Structs and scope
¨= ~ _ce |}6~h|4 N_racb"dOeGaf_
a" ~} Zbca |4 a" ~} b | b-
9eBzaeF-
~ dO_ ~ ±1
z Zb"U ~
~ eFUbZa" |
? | b¦Z_ | bcH- dO
OeGa" |
} Zb- ~ a ~ b a¢¡ }6~ | b ~/· - } ~ ³ acb"dOeGac_¦ ~ D~ _cTZb
a | dO
OeGa" |
O_ ~ b ~ ¬a" ~ _ce |}S~f|4 h_3acb"dOeGa=_8a" ~ O
d
O |
|4 "a ~ _3e |}6~ _ |4 -g£a"_+MO,G.0>ADCGAj#1'r24!?)F
~ b ~ _3acb"dOeGa ~ eFUbZa" |
o9-_=a" ~+| b"
struct
¨ ~ _3acb"dOeGa§ ~/¯
Oac |
+_§ ~ eFZbZa" |
-_ =~ 1--
Ohd9_3dZ¡ |
~ -eGacdZ¡]
~F~ O_§a" ~ ~/¯
Oac |
=
| b" ~ b»a | dO_ ~ _3acb"dOeGa0¨O_?_ ~ -_r¡fa |~/· } -
?¬6
| b" ~ b»a | acb"-
O_cZa ~ Zb"Z9 ~ ~ eGZbZac |
|4 _3acbcd9e/aa¢¡ }6~ | b dO
OeGa" |
a" | b"HZ } ZbZ ~ a ~ b"_ |4 _3acbcd9e/aa¢¡ }6~
a | HZeBO
~ -
O4d9- ~
a" ~ e | } ~ b=
~F~ O_a | µ(
|U a" ~ - | dO
a |4 ~ | bc¡Tb ~ dOb ~ ¡¥-
| ~ e/a |4 ac ~ _3acb"dOeGaF
Vdia
a"O_
| b"HZa" |
o_ |
9£¡ | Oa-
U ~v b | a" ~ ~G¯
Oa" |
|4 ac ~ _3acb"dOeGa0¸S-_ |
OTZ_a" ~
e | } ~ b9-_ |
O¡k_ ~F~
ov ~ eFZbZa" |
|4 ja" ~ _3acb"dOeGa _V_c-Na | 9 D~ 'Q!I.G24W¹JK> ,0#c,h#17mJ6,0
4.1.3 Member access
¼y_3acb"dOeGaV_ | b ~ acZ
ka" ~ =Zbca ~ _c-
} b | OdOeGa |4 a"_¦d9
O ~ b"£¡(
O]a°¡ }6~ _£a |ºg~ b"_V_ | ~ -_ce
dO
OeGa" |
9-£a°¡ |
^ac_ |m
a"9Za =~~/·(} Z
~/· a0 ¨= ~ | _3aH }6| bca-
ja±&Z
9-_ | | _3a
_c9 ~ ³ dO
9e/a" |
9-a¢¡ |4 k_racb"dOeGa_a" ~ -eFe ~ _c_
a | a" ~ Ua¹ ~ ~ bc_v±*ac ~v -d ~ _ t
a" ~
®*a"d
³ 6-
O ~ b ~ _ ~ b ~ ac ~ ~
a" ¯9~ bc_ . B0F / e |i ~
K
N } ~ t = (t1 , . . . , tN )
´ _-
~/·(} b ~ _3_c |
|4 a¢¡ }6~ a" -d ~
(ac ~
ya" ~ ®1a"{e | }6|
~
a
(t1 , . . . , tN)
tK
K
|4 £a"_ -d ~ eF-
{ ~ -eFe ~ _c_ ~ -_
¿ ~ b ~ _a" ~ W<,GWlF,GCHAO./.G,0)G)N2FJ6,FCGAj#c24C{±1_ ~F~ ¨Z9 ~
.
¨= ~ e | }6| _c£a ~=~/·(} b ~ _3_c |
_V-
T -d ~
.
a"9Za=a" ~ Ua ~ ~ b _AO./.G,0)G)-,/MLZ24C K
~ _ -
O |4 b | b- oZ_c_c4
-d ~ _a |
~ ~ b-eFe ~ _3_ |}S~ bZa | bF O ~
~ ~ } | ¡(_§ac ~
Na" ~ ¼ O
} }6~
9O ·¹| b £ a"_V_ }S~ Fe ¯ Fe _ ³
??
£"a _ ~ _8Z
T Zd ~ Z
9 =~ "_ F¡
a" ~ "b Za" |
9-K
dO ~ b"_
a"ib | dO4a" ~
r
b -eFe ~ _c_ |}6~ bUa | ba ]
~ ~ I
| | dia } diaa" ~
i²
\KI8I
d a } dia |4 9
9OeFZa ~ _ a"9Za =~
a ~ b } b ~ a
-d v
~ |4 "a ~ b Ua" |
9-6
dO ~ b t 8¨= ~ -OOa" |
Z | i
/
a" ~ 1® a"d } ~
-_ac ~ d | "a ~
a
(n, d)
n/d
4.1.4 Initialization and assignment
¤ ~ e0-
Oa"- ~| ~ eGac_ |4 _3acbcd9e/aa¢¡ }6~ -
O-_c_c4
Zd ~ _a | a" ~ rdO_3aµ ~]=~ | a | b
dO
OZ ~
aZSa°¡ }6~ _F
´1
~ |4 b | b- | b ~B· - } ~ 0a" ~I Zb"Z9 ~ |4 a¢¡ }S~
_K
9£a"- ~ £a"
t
rational
a" ~ -d ~|4 a" ~~B·(} b ~ _c_3 |
´1
H]_3acb"dOeGa0j
Oa"-0Ua" |
_ dOa ~
9Za"dib-¡h |
~
add (r, s)
~ ~ b3® _ ~ §1 ~ | b ~ -e 9Za ~ ~ b_ ~G} Zb"Za ~ ¡D
O ~ bha" ~ | | Kac ~ ~ eGZbZac |
_3aUa ~ ~
ja
rational t = add (r , s );
a" ~ b ~G| b ~ 9-_oa"
³ Z
9
add (r, s)
Zbcb"0¡ ~ ~ b"_F
-_c_34
O ~
a] ¡
~ -
?
~<~Gºg~ eGa |4
Oa"-F
O t.n ± a"ya" ~z¯ b"_3a¥e | }6|
~
ja |4 a" ~z -d ~<|4
± aca" ~ _ ~ e |
Oze | }6|
~
a ³
´1
ja ~ b ~ _ra"
O4¡DOa"O_-_ |N=| bcµ(_ a"
t.d
a3b"dOeGa"_Ta" ~ b ~F| b ~} b |m ~ 0¡ |4 Zµ
O4ª Zb3bF¡
Oa"-0Za" |
-
O
©
b }O}
Ooa" ~ ZbcbF¡
a | H_3acb"dOeGaFN¿ ~ b ~ _v-
~/· - } ~ a | _3 |m¶ 9Za =~
# include < iostream >
struct point {
double coord [2];
};
int main ()
{
point p;
p . coord [0] = 1;
p . coord [1] = 2;
point q = p;
std :: cout < < q. coord [0] < < " "
< < q. coord [1] < < "\n" ;
// 1
// 2
return 0;
}
¨=9_ =| bcµ _v_3
Oe ~ ac ~ 9ZaT ~ ~ b"_ |4 o_3a3b"dOeGa | ~ eGa | eFeGd } ¡oe |
ja"4d | dO_ } Ubca |4 a" ~
H-
H ~ | b3¡D(-
O_c
9e ~ ±1
¥e |
jacb-_3a=a | ZbcbF¡Ha¢¡ }6~ _ ³ _racb"dOeGaa°¡ }6~ _ µ(
|m ªa" ~ b ~ | bc¡
©
b ~ dOb ~ ~
ja"_F (b | a"O_Fia" ~ e | } ~ be0-
¯ 4dib ~v| dOa |U H-
j¡H ~ | bc¡He ~ _Ub ~ a | ~
e |} ~ | ba" ~
Oa"Z0Zac |
|4
q
point q = p
´1
a" ~ _"- ~ F¡$±1 ~ ~ b _ ~
Oa"Z0Zac |
³ (a" ~¹| bcH- } Zb-HUa ~ b"_
-
O
a" ~
a
b |4
dO
OeGa" |
add Zb ~
Oac- ~ b | a" ~k Zd ~ _ |4 r -
O s ¸a" ~k -d ~N|4 add (r, s) ac_ ~
-_ | b ~ _cdOa"_ b | -
o
Oa"-0Za" |
|4 k±Qa ~ }6| bUbc¡ ³ | ~ eGa ~
Ta" ~
_3aZa ~ ~
a |4
return
a" ~f d9
OeGac |
_
eFdia ~ ?
add ~/·(~
´1
O_3a ~ - |4 "a ~ Z |UD~ ~ eFZbUa" |
f_3aZa ~ ~
a?a"9Za»
Oa"Z ~ _ =~ e | dO-_ | 9 D~ b"a3a ~
t
rational t ;
t = add ( r , s );
¿ ~ b ~ _hMO,1LZAD:g>£#&s°'*!6'1#1'°Aj>w',/M ¯ b"_3a09-
O¥ac9_ ~F -dOar®&
Oa"- ~ _a" ~ Ua ~ ~ b"_F´1
| dib
t
e0-_ ~ Va" ~ ¡EZb ~{|4 a°¡ }6~
¸
b d9
O9- ~
ja-Va¢¡ }6~ _F ~G -dOa3®&
9£a"- 0Za" |
| ~ _
| a"O
Oi
int |
_ | a" ~ Zd ~ _ |4 ac ~ 9Za" ~ ~ b"_NUb ~ dO
9 ~G¯
~ a ~ bo ~F -dOar®&
Oa"-0Ua" |
±1_ ~F~ -_ |
~ eGac |
² D³ `´1
a" ~
~/· ao
~ =a" ~ Zd ~z|4
_o-_c_c4
~ a |
-
Oac9_
add (r, s)
t
-_c_34
O ~
a-DZ
¥9 }O}6~
O_ ~ ~ b3® _ ~
| b ~GD~ bc¡ dO
O9- ~
a"-a¢¡ }S~ ¦a =|$~/· } b ~ _c_c |
9_ |4 a¢¡ }S~
What about other operations?
-
O
z´*a =| dO½a" ~ b ~G| b ~ _ ~F~
e0-
$ ~ a ~ _ra ~ | b ~ d9-a¢¡DdO_c
9ac ~T|}S~ bZa | bc_
==
!=
9Za"dib-8a | 9 D~ a" ~ _ ~ a =|z|}6~ b"Za | b"_-_ || b_3a3b"dOeGa"_F } ~ ~
ja ~
_cdOep 0¡½acUa
a" ~ ¡oe | } Zb ~ ~ ~ br® _ ~
| b"H-¡DDa"O_ =| dOH ~ e | bcb ~ eGa0¬¦
Z
9 (a" ~
=~ 9 D~
t = (t1 , . . . , tN)
t = (t1 , . . . tN )
-
O
O
H
¡
b
|
t = t | K = 1, . . . , N
t=t
K
K -b -i¡p_c
Vdia | dibHa¢¡ }6~
~
|m _Ha"9ZaHa"O_ =|
a =| bcµS¬$dO
O ~ b¥ ~ ~ b3® _ ~
rational
¨= ~} b | ~ _{a"9Za{a" ~
~ dZa¢¡D =~<=| dO ~ b3b |
~F| dO_c¡e |
OeFdO ~ a"9Za 2/3 =
4/6
)G7j!?#3AO.0#1'3.BAj>¹P Aj>q:§, CGAD!SRi,
"
a
¢
a
¡
~
}S~ rational | ~ _
| a¥e |
OeF ~ a"^ac ~
int int |4
)-,FWzAD!?#1'3.BAj>P Aj>q:§,¹CGAD!SRi,T
Oe =~ ~
ja" ¡ } Zb"_
a"9Za ~/¯
~ a" ~ _"- ~ bZa" |
9-
(n, d)
dO ~ b
n/d
¨ ~ _"Z ~ 9 }O}6~
O_ a" | diba¢¡ }S~
b Z |mD~ ¤_c
9e ~ | a" } -bc_
extended_int |
(0,
)
-
O
ª{
<a"O_
Zb ~
a ~ b } b ~ a ~ ½-_ » ~ ~ b3® _ ~h~ dZa¢¡ =| dO<4 D~ dO_
(0, )
0
©0=
0
e0-_ ~
O¡
a" ~ } ~ ~
ja | b |4 <_3acbcd9e/aTµ(
|U _ka" ~ _ ~ HZ
a"eF- -d ~ b"-
O ~ -
O | bTac9_
b ~ Z_ |
?¦f
~ ac ~ b } b |U ~ _ ~ d9-a¢¡ |}6~ bZa | b"_ | b_3a3b"dOeGa"_FI
| b-
j¡ | a" ~ b |}S~ bZa" |
9_
~ ¡ |
Oza" ~ ~ ~ b]-eFe ~ _c_F?
Oa"Z0Zac |
?O-
O-_c_34
O ~
aO_3eFdO_c_ ~ <Z |mD~ }6~ bZac |
O_
a"9Zab ~ _ }6~ e/aha" ~ _ ~ H-
ja"e0Z -d ~ b-
O ~ eF-
½ ~N} b |U ~ ½ ¡ac ~ } ~ ~
ja | b06a" | dO4K
_ ~F~
~/· a_ ~ eGac |
?
| dhT4a§Zb"4d ~ a"9Za ~GD~
~ ~ b3® _ ~
Oac-FZa" |
]-
O-_c_34
O ~
a»e | dO ~
9e |
i®
_c_ra ~
a a"Ha" ~ _ ~ H-
ja"eF_ |4 a" ~ a¢¡ }6~ KZa ~ bF =~
O ~F~ ~
Oe | dO
a ~ b_cdOeh_c£a"d9Za" |
?
-
O =~] S_c |U |m £aeF-
¥ ~ ~ -a £a" ~ ~ D-
ac¡D
4.1.5 User-defined operators
_F
~G a°¡ }6~ _8b ~ dOb ~
G~ |}S~ bZa" |
9_G9dia ~
oa e | ~ _8a | a" ~
9-T
O 4
| _cdOe |}6~ b"Za" | O
|
~ ~ _c_+
Oe ~ -_ }6~ eGa 4
| b | b- {_3 |m _f
~ i ¡z ~G¯
9
9Ha" ~ d9
OeGac |
add =
~
b
Z
9
a
b
"
b
a
"
b
Z
"
a
"
a
i
b
O
d
4
{
"
a
3
_
a
Z
a
a
=~ ~
~ |¹}S~ |
~ |}S~
v
| t := r + s
|
~
~ ~
rational t = add (r , s );
1´ ~ - £¡D |m=~GD~ b0 =~
=| O
d Hµ ~ a | Z9HbZac |
9-g
d9 ~ bc_ µ ~=~ -Oo
a ~ ~ b"_ | b «9| Za"
O-®
a
dO ~ b"_F(¡{_3 } ¡ bca"
OT±1
| dObe0-_ ~ ³
}6| j
\KI8I
rational t = r + s ;
¨ ~ ~
~G¯ a |4 a"O_=T4a
| a= ~ T ~ OUa ~ ¡ | | dO_Fi
} Zbca"eFdOZb c_
9e ~ "a ~
9-T
O |4
=
a" ~f d9
OGe ac |
_ T_=a | ~ dO a ~ b ~ Z_ |
9Z9 ~ ¸(9
diae |
O_c ~ b a" ~f~/·(} b ~ c_ _c |
add ~F~
rational t = subtract ( multiply (p , q ) , multiply (r , s ));
-
Oac_
©
9ZacdOb"-ªe | dO
a ~ b } Zbca
rational t = p * q - r * s;
a | ~ a
Z
~ 9Za =~ ~ -
?
¨ ~
9ZacdOb"-»
| aUa" |
e0Z
z
9 ~F~ ~ -eO ~GD~ K¬µ ~ ¡ ~ ZacdOb ~|4 a" ~ v -
O4d9- ~ _
a"9ZaK | _3a |4 a"_ |}6~ b"Za | b"_±1_ ~G~ ¨U ~
va" ~ ¼ }O}6~
OO ·]| bKa" ~¦ dO4_3a ³ e0Z
+ ~ 24P(,FCm> 2-AiMO,/M
??
a |=| bcµ | b | a" ~ b=a¢¡ }6~ _-_ =~ 1¦¨O_ ~ Z
9_8acUa =~ eF-
¥dO_ ~ a" ~ _"- ~|}6~ b"Za | b a | µ ~
oa |
} ~ ~
a Zb" | d9_ |}6~ b"Za | b"_F¬ =~ |UD~ b" | -Oª¹ac ~ a | µ ~
?
©
´1
} b"
9eG } ~ Va"O_k_N
| a"O
O
~G ¬ =~ -b ~ -i¡µ
|U acUaNa" ~ 9
9Zbc¡ |}6~ bZa | b
_
+
ZZ9 ~| b _ ~GD~ b-ga¢¡ }S~ _F | b ~B· - } ~
-
O
¤y9Za _V
~G _Va"9Za =~ e0-
H-O
int
double
~GD~
E | b ~¹|UD~ bc | -O_ |
| dib |U
?I-
O½_c } ¡z ~ ava" ~ e | } ~ b ¯ 4dib ~N| dia b | a" ~ e0-
} Zb- ~ a ~ b a¢¡ }6~ _ Oe |
~ _
~F~ ~
¥e ~ bca-
¥e |
a ~B· a0
´1
|mD~ b" | Z9
9E-
|}6~ bUa | b0 =~ e0Z
9
| aHe9-
O ~ ac ~|}6~ bZa | b u_HZb"a¢¡D } b ~ e ~ ~
Oe ~| b
-_c_ | eFUa" £a°¡DZdia =~ e0-
Ne/b ~ Za ~=D~ b"_3 |
O_ |4 a ackZb3£acbZbc¡ | b"H- } ZbZ ~ a ~ b¦-
Ob ~ a"dib"
a¢¡ }6~ _F
}S~ bZa | b |mD~ b" | Z9
9h_ _c } ¡k_ }6~ eF-Se0-_ ~f|4 LG:!I.0#1'324!y24P(,FCm> 2-AiMD'Q!SRD | b ~/· - } ~
-
O
-U ~ =~ e | dOT ~ eFUb ~ a" ~
| |U
O
9
O+a" ~ _racb"dOeGa"_
rational
extended_int
a =|{ dO
OeGa" |
9_
a" ~ _"- ~} b | bZ £a" | dOa
eGb ~ Zac
O{T
9- ~ eF-_c?¬ | b+-
¡e0Z§a | a" ~
dO
OeGa" |
square
oac ~
} b | b"-a" ~ e | } ~ b8e0Z
¯
O | dia b | na" ~ e0- } Zb- ~ a ~ b8a¢¡ }6~
Oe |4 a" ~ a =|¹ d9
OeGac |
O_ =~ ~ -
?
// POST : returns a * a
rational square ( rational a );
// POST : returns a * a
extended_int square ( extended_int a );
d9
OeGac |
|mD~ b" | -O
OT
~
~ b-I_dO_ ~G d9*?9dia]
| a]
i
| -O
Oi`¨ | ~G¯
~ -
|mD~ b" | - ~ |}6~ bUa | b0 =~ 9 D~
!I2D#3Aj#1'324!?´1
Ha"O_
| aZa" |
?Da" ~
Z ~
|4 a" ~f|}S~ bZa | b8_
a | a" ~} b ~G¯i·
f´1
e0Z_ ~|4 a" ~ 9
9Zbc¡-O9£a" |
operator
a"O_= || µ(_-_ | |U _-
O{b ~G} Ze ~ _ac ~f dO
OeGa" |
add
~ Z b"¡-_dO_ ~F dO¦-_ |}6~ bUa | b |UD~ b3®
a | dO_ ~ ac ~ L/:g!I.0#1'r24!Aj>N2FJ6,FCGAj#c24C
| 9a"-
~ T ¡H }9}S~
O9
9h£a"_8a | µ ~
|}6~ bZa | b | ba" ~ a¢¡ }6~ rational
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b)
{
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
´1
b | b-
( =~ e0-
|m
b ~G} -e ~
~ ¡
rational t = r + s ; // equivalent to rational t = operator + ( r , s );
¿ ~ b ~ Kac ~ e | T ~
jab ~F~ bc_+a | a" ~k -eGafa"9Zav-
|}S~ bZa | bfe0Z
½-_ | ~ ./Aj>*> ,/M½
dO
OeGa" |
9-
| aZa" |
K¸
^e |
jacb-_3aFa{ }O}6~ Ub"_H
'Q!4tX !I2D#3Aj#1'r24!
¨= ~ eF-
d9
OeGac |
9-
r + s
| aZa" |
he0-
h ~ dO_ ~F dO | bO9-eGace } dib }6| _ ~ _F4_c
Oe ~ a ~ } Z_c ~ _Ka" ~ -eGaIa"9ZaI-
|}6~ bZa | b
__c } ¡o_ }6~ eG- d9
OeGac |
?¸9
-
}O} eFZa" |
? |m=~GD~ b09a" ~v}6|
a_=a | D| dO
OeGa" |
9-
| aZa" |
¥-
OdO_ ~ a" ~
¯i·
| aZac |
?
¨ ~h| a" ~ ba"ib ~F~ -_cehZb"ac9 ~ a"e |}6~ bUa" |
O_
Zb ~ _cTZb0O-
O ~ b ~=~h|
O¡{4 D~ a" ~ £b
~ eFUbZa" |
O_F
// POST : return value is the difference of a and b
rational operator - ( rational a , rational b );
// POST : return value is the product of a and b
rational operator * ( rational a , rational b );
// POST : return value is the quotient of a and b
// PRE : b != 0
rational operator / ( rational a , rational b );
¤ ~ e0Z
Z_ ||mD~ b" | - ½a" ~ dO
9Zbc¡
bZa | b0¸
d9
OeGac |
9- |}S~ b Za | b
| a"Za" | ?
§£a9-_
- |}6~
"a ~ _c- ~
Z ~ Z_a" ~
Ubc¡ D~ b"_c |
?i9diaa9-_ |
9£¡ |
~
O_3a ~ - |4 a =|¹} ZbZ ~ a ~ b"_GV´1
"a ~h| |m
9 } ~ ~
a Zac |
? =~ dO_ ~ a" ~ ±1 | 9 ¯~ ³ | e0-»e |} ¡ ª |4 ca ~ eF- } Z"b - ~ a ~ b
©
Z_a" ~ b ~ a"dib"
-d ~
a
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
´1
| cb ~ b8a | e | } Zb ~ bZa" |
9-9
dO ~ b"_G =~
~F~ Ha" ~ b ~ Za" |
9- |}6~ bUa | b"_ -_ =~ 1¿ ~ b ~
_=a" v
d -a¢¡ |}6~ bZ a | b-_-
~/· - } ~
~ ~ 9
// POST : return value is true if and only if a == b
bool operator == ( rational a , rational b)
{
return a .n * b.d == a.d * b .n;
}
4.1.6 Details
´ ac ~ b ~ Zb ~ _ ~GD~ b- dO
OeGa" |
O_ | b |}6~ bZa | b"_ |4 a" ~ _c- ~
9- ~
Overloading resolution.
b
b
6
"
a
e
f
b
_ ~ -
av
½oe ~ bca"-
dO
OeGa" |
½eF-1
} |
~ | } ~ 9-_va |¥¯ 4dOb ~k| dia Oe |
~ f
¨=9_ } b | e ~ _c__=e0- ~ $24P(,FCm> 2-AiMD'*!SR{CF,0)-2D>q:S#1'r24!p-
O |
9£ ¡T ~G}6~
OO_ |
oa" ~ a¢¡ }6~ _ |4 a" ~ e0-
\KI8I
} Z b- ~ a ~ b"_F e0-_ ~ _¹a"9Za =~
add (r, s)
b
e
c
_
_
Z
O
d
} | ~
D~ b" | -O
Ob ~ _ | dia" |
$_ac ~ b ~F| b ~ |
~ Zae | } ~ a" ~ ¨= ~ b ~ Zb ~ a =|
~F~ a | e |
O_c ~ bF¬ =~ e0Z
~ a" ~ b9 D~ -
y:g!0:KAj>w'ut,/M dO
9e/a" |
eF-±1£µ ~
b | b"- ³ | b{0:KAj>w'ut,/M d9
OeGac |
Fe -h±1£µ ~ std::sqrt(2.0) ³ ¨ |
d9- ¯9~ dO
9e/a" |
¥eF- |4 a" ~f| b"
C
K££ ³
a" ~ e | } ~ b Z_fa |H¯
OTHZa"eO
O dO
9e/a" |
< ~ eGZbZac |
?=-
OO9Za ~ _]Zb ~ - dO
9e/a" |
O_
Z ~ _3d9e\a"9Zahac ~o dO
OeGa" |
e0- _
$a" ~ _ce |}6~o|4 _ | ~ ~ eGZbZac |
|4
f |4
f
´1
½-OOa" |
Ka" ~
d9 ~ b |4| b"H- } Zb- ~ a ~ b"_]d9_ravHUa"eza" ~
dO ~ b |4 e0Z } Ub- ~ ®
a ~ bc_FI-
O ~ -e½e0Z } Zb"- ~ a ~ bfdO_3av ~N|4 oa¢¡ }6~¹ | _ ~k Zd ~ _+e0Z
~ e |
D~ bca ~ $a | a" ~
e | bcb ~ _ }6|
OO
O | bcH- } Zb- ~ a ~ b=a°¡ }6~ _F
´1
d9- ¯9~ dO
OeGa" |
eF- |4 a" ~f| b"
± ¬£¬ ~ b~ £ ³
C ?
_
9- ~ _ } Ze ~ |
O¡Ha"O_=
9- ~ _ } -e ~ __ ~ Zb"e ~ | b
e0Z
9O9Za ~ _F
± ¨ ~ b ~ _ |
~ _ }6~ eFZ8b"dO ~ a"9Za_ | ~ ®
Argument-dependent name lookup (Koenig lookup).
a" ~ _HZµ ~ _a" ~ _3a |4 eF-
O9Ua ~ _Zb" ~ b0´ _ | ~ e0- } Zb- ~ a ~ ba°¡ }6~|4 -
dO
d9- ¯9~
dO
OeGa" |
Ee0-_h ~G¯
~
E
9- ~ _ } Ze ~ ± | b ~/· - } ~ a" ~
9- ~ _ } -e ~ std ³ ac ~
Ea" ~
e | } ~ b¦-_ | _ ~ Zb"e ~ _ | bVe0-
OO9Za ~ _¦
+¨=O_¦_dO_ ~G d9H-
O¡ | b |}6~ bUa | b"_-
OT- |m _
a" ~ a | ~ e0- ~ $dO
d9- ¯9~ $
E
¯i·
| aZa" |
?¨= ~H}S|
a |4 dO_c
O |}6~ bZa | b"_h
E
¯O·
| aZa" |
=| d9H ~ _ }6| ~ o ?=~ 9-Ha | ~
ja" |
Hh
9- ~ _ } -e ~ _ | ~G ~ b ~
Ha" ~|}6~ bZa | b
e0-1
| b ~ -eeF-
O9Ua ~I O
d
9e/a" |
Z
9 ~ -ee0Z } Zb- ~ a ~ 0b ma
Resolution: Finding the best match.
_e ~ e"µ ~ H |mp=~ (ac ~ e0- } Ub- ~ a ~ bIa°¡ }6~ HZa"e ~ _Ia" ~ e | bcb ~ _ }S|
9O
O | b"H- } Zb"- ~ a ~ b
a¢¡ }6~ H¨ ~ b ~ Zb ~k| dib d9-a¢¡ ~GD~ F_ |
O b | ~ aca ~ bva ¥
| =| b"_ ~ §4 D~
½
a" ~k| |m 9
_ra0
±c² ³
¨= ~ ¢a ¡ S
} ~ _ |4 "a ~ e0- } Zb"- ~ a ~ b -
O{a" ~]| b"H- } Zb"- ~ a ~ b Z b ~ "a ~
_"Z ~
± 4³!"
¨= ~ b ~ _ } b | | a" |
b | a" ~ e0- } Zb"- ~ a ~ b+a°¡ }6~ a | a" ~
| b"HZ } Ub- ~ a ~ ba¢¡ 6
} ~ ¤ ~ 9 D~ _ ~F~
p_ | ~{~/· - } ~ _ | b } b | | ac |
O_Fµ ~o b |
a
-
O b |
a
bool | int
float | double
± ³$#%&&')(+*,-.!/0!1 ¨= ~ b ~ _H½_3aZ
99Zbce |
D~ b"_c |
b | a" ~ e0-
} ZbZ ~ a ~ ba¢¡ }6~ a | a" ~+| b"HZ } ZbZ ~ a ~ b=a¢¡ }6~ ¤ ~ 9 D~ _ ~F~
a"9Za
- dO
99- ~
a-
Zbca"O ~ a"ea°¡ }6~ _e0-
¥ ~ e |
D~ bca ~
a |~ -e | a" ~ b ¡{_3aZ
99Zbc¥e |
D~ b"_c |
O_F
± ³23-4*,)56&*,7%8*,&9!)(+*,-.9!1 ¨= ~ b ~ _kdO_ ~ 3b ®& ~G¯
~ <e |
D~ "b _3 |
b | Àa" ~
e0Z } ZbZ ~ a ~ bNa¢¡ }6~ a | a" ~| b"H- } Zb- ~ a ~ k
b a¢¡ }S~ ¤ a a | dO_ ~ b31® /~ ¯
~
~ ~ T
e |
D~ b"_c |
9_ |
O¡HZa ~ b
{a"O_= | | µg
¼ dO
OeGa" |
_=e0- ~ ElG,0#&#c,FCHa"9-
a"ob ~ _ }S~ eGaa | } Zb- ~ a ~ b0( a" ~ HZa"eoacUa
f
g
f
OOdOe ~ _ |
a"9Za } Zb"- ~ a ~ b_Za
~ -_3a-_
| | -_
a" ~ HZaceB
9OdOe ~ ¡
´ a" ~ HZa"e
g
_=b ~ -¡T ~ aca ~ b0 _e0- ~ <)F#1C0'r.0#&>q7$lG,0#&#c,FC | bac ~]} Zb- ~ a ~ b0
f
¼ d9
OeGac |
_e0- ~ <lG,0)F#fWAj#c.0%E a]_ ~ a3a ~ ba"9-
-
¡ | ac ~ bveF-
O9Ua ~
-
f
g
Z
b
a
"
b
F
_
(
O
3
_
c
a
"
b
G
e
"
a
T
¡
c
a
a
b
"
a
9
Z
a
r
_
a
U
b
a
0
b
}
~ ~
~ ~
~
| ~]}
~ ~
g
O ~ b a"O_8 ~G¯
Oa" |
?Da" ~ b ~ _ Ua= | _3a |
~ ~ _3a=HUa"eKD9dia=a HF¡N9 }O}6~
Ha"9Za8ac ~ b ~
_
| ~ _3aHZa"e?O
OeeF-_ ~ ac ~v dO
9e/a" |
e0Z»_ADWzl0'QR4:»24:S)F9-
O¥ac ~ e | } ~ b_3_cd ~ _
-
~ bcb | b ~ _c_"- ~
¿ ~ b ~ _-
~/· - } ~ ¦ |
O_c ~ ba" ~ a =|k|mD~ b" | - ~ dO
OeGa" |
{ ~ eFZbUa" |
O_
void foo ( double d );
void foo ( unsigned int u );
´1
¥a" ~ e | ~+ b"-4 ~
a
float f = 1.0 f ;
foo (f );
a" ~ ¯ b"_3a U| D~ b" | -{_=eB | _ ~
KO_c
9e ~ float e0Z
¥ ~} b | | a ~ Ta | double (9dOa |
O¡H_3a"-
OUb"(®
e |
D
~ bca ~ a | unsigned int ´1
int i = 1;
foo (i );
a" ~ e0-4_?-94d | dO_F0_c
9e ~
e0-
v ~ _ra-
O9Zb"(®&e |
D~ bca ~ va | | a"
Z
9
int
double
unsigned int
4.1.7 Goals
Dispositional.
² ³ µ(
|m
|m
¼=a=a"O_ }6|
ja0 ¡ | d_3 | dO<FF
_3acb"dOeGac_e0Z
k ~ d9_ ~ ka | -4b ~ DZa ~ _ ~GD~ b-9O ºS~ b ~
a¦a¢¡ }6~ _
ja |f|
~
~G
a¢¡ }6~ ¸
d
9 ~ bc_3a-
Oa" ~ O
g
4³ O
º ~ b ~
Oe ~ ~ a =~F~
ac ~ _3¡(
ja-eGace0--
O_ ~ HZ
a"eF- Zd ~ b-
O ~¹|4
_3acb"dOeGa0¸
³ µ(
|m
acUa
f
Operational.
dO
OeGa" |
9_-
O |}6~ bZa | b"_=e0Z
¥ ~+|mD~ "b | - ~ ?
´1
} Zbca"eFdOZb0j¡ | d_c | d9{ ~ Z9 ~ a | G0
± ² ³ G~ ¯
~ _3a3b"dOeGa"_ | _ ~ _ ~ H-
ja"e0- -d ~ b-
O ~ _e | cb b ~ _ }S|
9a | acUa |4 4
D
~
HZa" ~ ®
HZace0-S_ ~ a"_F¸
± 4³ } b |m ~ ~/¯ O
ac |
O_ |46 dO
OeGa" |
O_ Z
9 |mD~ "b | Z ~ |}S~ bZa | bc_ |
H_3acb"dOeGac_Fi-eFe | b"O
O+a |
4 D~
dO9
e/a" | 9
-a¢¡g¸
± ³ b"a ~} b | bZT_8a"9Za ~/¯
~ -
O¥dO_ ~ _racb"dOeGa"_-eFe | bc9
9a | 4
D
~
dO
OeGa" |
9-a¢¡D
\KI8I
4.1.8 Exercises
,1t !I, Ay#17mJ6,
L-24C½#&%(CG,G,0s°P Aj>w:»,/M >@2GR'3.'Q!
Exercise 93
Tribool
%gADP(,¹#&%S,N#1C0:g#&%P Aj>q:§,0)#1C0:§,G5»LUAj>£)-,G5
AD!M:g!?Z!I24;!Y
I24CT#&%S,k#17mJ6,
5'QW¹JK> ,FW<,G!?#
#&%S,N> 2GR4'r./Aj> 2FJ6,FCGAj#c24Cm)
Tribool
#&%(CF,G,FsrP Aj>q:§,BM
> 2GR4'r.F5H;f,
// POST : returns x AND y
Tribool operator && ( Tribool x , Tribool y );
// POST : returns x OR y
Tribool operator || ( Tribool x , Tribool y );
;%S,FCF,
AD!M
ADCF,{MO,*t !I,/MAO./.G24CGMD'Q!SR#c2#&%S,L-2D>*> 24;='*!SR{#1;]2#3Ailm> ,0)ZY
∧
∨
± ¹² ³ ± 4³
LZAj>w)-,
LUAj>£)Z,
LUAj>£)Z,
LUAj>£)Z,
∧
LUAj>£)Z,
:g!?Z!I24;!
#1C0:»,
:!?-!I24;=!
LUAj>£)Z,
:!?-!I24;=!
:!?-!I24;=!
1# C0:§,
LZAj>w)-,
:g!?-!I24;=!
#1C0:§,
¨ ~ _3a¡ | diba¢¡ }6~ ¡ b"ac
O } b | b"-
¡
|4 | dibeB | e ~
∨
LZAj>w)-,
:!?-!I24;=!
#1C0:§,
LUAj>£)-,
LZAj>w)-,
:g!?-!I24;=!
#1C0:§,
:!?-!I24;=!
:g!?Z!I24;!
:g!?Z!I24;!
#1C0:»,
#1C0:§,
#1C0:»,
#1C0:»,
#1C0:»,
a"9Za | dOa } dia"_ a" ~ _ ~ acbcdOac{aZ9 ~ _
¥_ | ~]| b"HZa
,1t !I,+A#17mJ6,
LZ24Ch.G24WJ?:S#1'*!SR;'*#&%N'*!?#c,°Ri,FCm)W<2-MD:g>@2 Y Aj#&%S,FWAj#1'r./Aj>Q>w7j5
Exercise 94
Z_7
7
#&%('1)H.G24C0CG,0)rJ624!Mj)¹#c2#&%S,t !6'*#c,kC0'Q!SR
À2"LCF,0)G'°MD:§,o.0>Aj)F)-,0)W<2-MD:g>@2
Y
= /7
7
I24CT#&%S,k#17mJ6,
5='*WJK>@,GW<,F!?#vAiMiMD7'*#1'324!yAD!M)G:Klm#1CGAO.0#1'r24! 2FJ6,FCGAj#c24Cm)
Z_7
// POST : return value is the sum of a and b
Z_7 operator + ( Z_7 a , Z_7 b );
// POST : return value is the difference of a and b
Z_7 operator - ( Z_7 a , Z_7 b );
AO.G./24CGMD'*!SR#c2¥#&%S,LZ2D>*> 24;'Q!SR#3Ail0>@, #&%('1)#3Ailm> ,{Aj>w)-2MO,1t !I,0)k)/:»lm#1CGAO.F#1'324!
'1)#&%S,
x−y
:g!6' 0:§,!6:gWzlF,FC
)G:§.0%z#&%gAj#
Y
± ¹² ³ ± 4³
z {0, . . . , 6}
x = y + z
+
0
1
2
3
4
5
6
0
0
1
2
3
4
5
6
1
1
2
3
4
5
6
0
2
2
3
4
5
6
0
1
3
3
4
5
6
0
1
2
4
4
5
6
0
1
2
3
5
5
6
0
1
2
3
4
6
6
0
1
2
3
4
5
CG24P'rMO,¥MO,*t !6'1#1'324!?)L-24CT#&%S,L-2D>*> 24;='*!SRl0'*!ADC07½ADC0'1#&%(W,0#1'3.¥2FJ6,FCGAj#c24Cm)¥24! &# %S,
Exercise 95 #17mJ6,
Y
± 4³ ± ³
rational
// POST : return value is the difference of a and b
rational operator - ( rational a , rational b );
// POST : return value is the product of a and b
rational operator * ( rational a , rational b );
// POST : return value is the quotient of a and b
// PRE : b != 0
rational operator / ( rational a , rational b );
CG24P'rMO,zMO,1t !6'1#1'r24!?)vL-24C#&%S,+L-2D>Q>@24;='Q!SR l0'Q!ADC07ECG,0> Aj#1'r24!Aj>f2FJS,FCGAj#c24Cm)24!#&%S,
Exercise 96 Y "! MO24'Q!SR #&%('*)G5$#1C07 #c2`CF,G:S)-,2FJ6,FCGAj#c24Cm)y#&%gAj#EADCF, Aj>wCG,/AiMD7 MO,1t !I,/MiY
#17mJ6,
rational
± 4³ ± ³
// POST : return value is true if and only if a != b
bool operator != ( rational a , rational b );
// POST : return value is true if and only if a < b
bool operator < ( rational a , rational b );
// POST : return value is true if and only if a <= b
bool operator <= ( rational a , rational b );
// POST : return value is true if and only if a > b
bool operator > ( rational a , rational b );
// POST : return value is true if and only if a >= b
bool operator >= ( rational a , rational b );
CG24P'rMO,¥MO,*t !6'1#1'324!?)L-24CT#&%S,L-2D>*> 24;='*!SRl0'*!ADC07½ADC0'1#&%(W,0#1'3.¥2FJ6,FCGAj#c24Cm)¥24! #&%S,
Exercise 97 #17mJ6,
A4Ri, 5oAD!M\#c,0)F#N#&%S,GW 'Q!¶AJ?CF2GR4CGADW
LZ24C#&%gAj#¹'*#{./24:S>M^lF,
extended_int %S,0> JDLG:g>#c2<J?CF24P'°MO,AD!n24:g#J?:S#¥2FJ6,GCGAj#c24CTL-24C<#&%S,#17mJ6,
5AD!MALG:!I.0#1'324!
extended_int
#&%gAj#¥Aj)F)G'@R4!?)z#c2 AD!
P Aj>q:§,ApP Aj>q:§, 2"L#17mJ6,
Y )'Q! #&%S,{J?CF,FP-'324:S)
extended_int
int
,BX9,GCF.F'1)Z,F5#1C07z#c2{CF,F:S)Z,¥.G2ZMO,-Y
± 4³ ± ³
// POST : return value is the sum of a and b
extended_int operator + ( extended_int a , extended_int b );
// POST : return value is the difference of a and b
extended_int operator - ( extended_int a , extended_int b );
// POST : return value is the product of a and b
extended_int operator * ( extended_int a , extended_int b );
// POST : return value is -a
extended_int operator - ( extended_int a );
\KI8I
Exercise 98
]24!?)/'rMO,FCk#&%S,LZ2D>*> 24;'Q!SR)Z,0#+2"L#&%(CF,/,
LG:!I.0#1'324!?)ZY
void foo ( double , double )
{ ... }
void foo ( unsigned int , int )
{ ... }
void foo ( float , unsigned int ) { ... }
I24C,/AO.0%p2"L¹#&%S,L-2D>Q>@24;='*!SR+LG:!I.0#1'324!
// function A
// function B
// function C
B. Aj>*>w)G5vMO,/.F'rMO,H#c2;%('3.F%\2"LN#&%S,
L/:g!I.0#1'r24!?)
A, B, C
'1#fCF,0)-2D>qP(,0){#c245¹24CzMO,G.F'°MO,¥#&%gAj#v#&%S,<.BAj>*>8'1)ADWlF'QR4:»24:S)ZY VXmJK>AD'*! 7924:gCMO,G.G'1)G'r24!?)
V%('*)
,BX9,GCF.F'1)Z,hCF, 0:'*CF,F)724:#c2TCF,/AiMo#&%S,JSADCGA4R4CGA0JK%½24!p24P(,GCm>@2-AiMD'Q!SRTCF,0)Z2D>w:g#1'324!½'*!#&%S,
,0#3AD'1>w)
)-,/.0#1'324!Y
A
l
foo(1, 1)
foo(1u, 1.0f)
.
foo(1.0, 1)
foo(1, 1u)
foo(1, 1.0f)
M
L
,
foo(1.0f, 1.0)
4.2 Type Variants
%('1)f)-,G.F#1'324!p,BXmJK>AD'*!?)+#1;f2T;AD7)¹2"L2(lm#3AD'Q!6'*!SRTP ADC0'°AD!?#&)k2"LhANR4'QP(,F!$#17mJ6,#&%gAj#
%gADP(,E#&%S,)ZADW<,$P Aj>q:§,$CGAD!SR(,yl0:g#zMD' h,FC'Q!./,FCm#3AD'*!LG:!I.0#1'324!Aj>q'1#17 Aj)rJS,G.0#&)ZY
F~ ~ b ~
Oe ~ a¢¡ }S~ _k,F!Ailm> , LG:!I.0#1'324!?)+#c2AO.G.G,rJK#]AD!MHCF,F#1:gC0!>wP Aj>q:§,F)¹AD!MH'*!JSADCms
#1'r.F:S>ADC.0%gAD!SRi,o#&%S,TP Aj>q:§,0)2"Lk#&%S,F'*CfL-24C0WzAj>?JSADC/ADW<,0#c,FCm)UYH |
O_3a3®1a¢¡ }6~ _¥Aj>*> 24;
:g)#c2zMO,*t !I,hP Aj>w:»,0)kAj)klF,G'*!SRo!I24!?srW2-MD' t
Ailm> ,F5 'Q!)/:§.0%<Ao;AD7#&%gAj##&%S,T.G24W¥s
J?'*>@,FCp.BAD! MO,F#c,G.0#H'1>Q>@,°R(Aj>vW2-MD' t.BAj#1'324!?)ZY ],1LZ,FCF,F!I./, #17mJ6,0)\AD!M.G24!?)G#&s3#17mJ6,0)
.BAD!¶lG,./24Wl0'Q!I,/M^AD!M!Aj#1:gC/Aj>*>q7 .G24W,z:jJ`'Q!'*W¹JK> ,FW,F!?#1'*!SR{LG:!I.0#1'324!Aj>q'1#17
LZ24CN)F#1C0:».0#&)ZY
4.2.1 Reference types
~ I
a dO_I
U| acbc¡va | } ~ ~
ja6a" ~ - OOa" |
+-_c_c4
O ~
ja |}6~ bZa | b
bac ~ _racb"dOeGa
+= |
rational
b | b | b- (V¿ ~ b ~ _Z
Zaca ~ } aF¬
rational operator += ( rational a , rational b ) {
a .n = a. n * b.d + a. d * b.n ;
a .d *= b .d;
return a ;
}
¤ya"oa"O_F =~ eF-
bca ~
rational r ;
r.n = 1; r .d = 2;
// 1/2
rational s ;
s.n = 1; s .d = 3;
// 1/3
r += s;
std :: cout < < r .n < < "/ " < < r. d < < "\ n";
d HF¡ -b ~ -i¡\_ ~F~ a"9Zaka" ~| dia } dOa |4 ac9_
| aN ~ ac ~ ~ _cb ~
~ eF-
| y
5/6
b |
~ eGac |
(² 9ZaH9 }O}6~
O_ ~
r += s ± ~ dO Z ~
ac¡D operator+= (r, s) ³ _
9
d
Z
a
~G
~ K¬ r Z
9 s Ub ~~G -d9Za ~ ?-
Oyac ~ b ~ _cdOa"
O -d ~ _oZb ~ dO_ ~ a |
Oa"- ~ a" ~
| b"H- } Zb"- ~ a ~ bc_ a -
O b |4 a" ~¹ dO
OeGa" |
operator+= ¨ ~ -d ~ _ |4 r -
O s Ub ~
| a
e9-
O ~ ¥ ¡oa" ~f d9
OeGac |
¥e0Z1
¿ ~
Oe ~ a"a" ~ Z |UD~ } ~ ~
aUa" |
|4
a" ~ PAj>w:», |4 a" ~T~/· } b ~ _c_c |
operator+=
_I
O ~G~
D9diaIa" ~ ~ _cb ~ , h,/.0#&a" ~
OeGb ~ ~
a |4 D | ~ _¦
| a9 }O}6~
?¨=9Za _
r += s
5/6
r
j
¡
a
_
i
d
=~ ~ 1/2
| a } dOa
oa" ~ Z |UD~]} ~ e ~v|4 e | ~
´1
| b" ~ b=a | } ~ ~
a
b
b"£¡D =~ ¹dO_3a ~
U ~ d9
OeGac |
O_=a | eB9-
O ~ a" ~
operator+= } |}6~
-d ~ _ |4 a" ~ be0- } Zb- ~ a ~ b"_F dib } b"_c
94£¡D =~ |
| a
~G~ <¹
~/ e |
Oe ~/} a | ba"9Za |
a" ~f d9
OeGac |
_c ~ ¸ =~ _c } ¡N
~G~ h
~/ eFZa ~ | bc¡ |4 a¢¡ }6~ _F
(1]I
O²
(¦
Definition.
´ _Z
¡Ha¢¡ }6~ ia" ~
_=a" ~ e | bcb ~ _ }S|
9O
OHCF,1LZ,FCF,F!I./,T#17UJS,¥±*b ~ - -_ b ~F~ b ~
Oe ~ ª | b b ~F~ b ~
Oe ~ a | ª ³ O´1
©
©
_V ~
ja"e0Z9a | ¨ ~ O ºS~ b ~
Oe ~ _V
Na" ~
Oa"-0Ua" |
-d ~ b-
O ~ Z
9 dO
OeGa" |
Za¢¡D -
O-_3_c4
O ~
a=_ ~ H-
aceF_F
¼ Zb"Z9 ~|4 b ~F~ b ~
Oe ~ a¢¡ }6~ ±&-_ | e0- ~ T¹CF,1LZ,FCF,F!I./, ³ e0-
T ~
Oa"Z ~ |
O¡ b |
-
>qP Aj>q:§, |4 a¢¡ }6~ | b
Z
¡Ha¢¡ }6~f | _ ~] -d ~ _e0Z
¥ ~ e |
D~ b3a ~ a | O¨= ~
Oa"-0Ua" |
HZµ ~ _=a-
EAj>w'°Aj) |4 a" ~ Zd ~ ¬¦-
| a" ~ b
Z ~f| ba" ~f| ~ eGa ~ O
Ooa" ~ -d ~ I¤ ~ -_ |
_"F¡oa"9Za=a" ~ b ~G~ b ~
Oe ~ CG,1L-,FCm)ha | a"9Za | ~ eGaF¨= ~v| |U
O ~/· - } ~ _3 |m _=a"O_F
int i = 5;
int & j = i ;
// j becomes an alias of i
j = 6;
std :: cout < < i < < "\n" ;
// changes the value of
// outputs 6
¼¾b ~G~ b ~
Oe ~ e0-
O
| af ~
Za ~ b-_3_c4
_ | ~ a"O
Oa |
´1
b"a"
O
¹ac ~ Z
j = 6
_-
--_ |4
j
i
´1
a ~ b"
9-¡D§ Zd ~T|4
a | ¨O_ ~/· } -
O_ ¡ =~
a"O
O4_=µ ~
e 9-
O ~ a |
a" ~ b ~F~ b ~
Oe
|mD~ } ~ e ~|4
b G~ ~ bha | -
| a" ~ b | ~ e/ah
~ =~
- e/a]-_c_c4
a | a" ~
e | ~ =~ a" ~ b ~G| b ~ e9-
O ~
i
b
Oa"-0Ua" |
?´ 8=~
a ~
2(l
,/.0#]b ~F~ b ~ a | ¡a0
a" ~ -d ~=|4 a | D_c
Oe ~
i 6
a°¡ 6
_+b ~G} b ~ _ ~
ja ~ E ¡a" ~ Z9ib ~ c_ _ |4 a" N
} ~ ~ | ~ e/ahab G~ ~ b"_
~G~
-
-d ~ a |
Oa"- ~ hb ~F~ b ~
Oe ~ ¢a ¡ 6
¡
} ~] Z b"Z9 ~ O-
O j
int & j ;
int & k = 5;
// error : j must be an alias of something
// error : the literal 5 has no address
int i = 5;
int & j = i ;
int & k = j ;
// j becomes an alias of i
// k becomes another alias of i
|
u a =
| b3µS=¼
¡ ~/· } b ~ c_ _c |
|4 b ~G~ b ~
Oe ~ ¢a ¡ 6
} ~ _-
- d ~ a"_ ~ 8¤ ~ eF-
a" ~ b F~ | b ~ d9_ ~
b ~F~ b ~
Oe ~
a
Oac- ~ -
| a" ~ b b ~F~ b ~
Oe ~
9dOa ac ~
=
b ~G~ b ~
Oe ~ a | dia
~ |
ua= ~ a+
r |
rr
r
-
| a" ~ bb F~ ~ b ~
Oe ~ a | a" ~v| ~ eGab ~F~ b3b ~ a | ¡ ¬
r
4.2.2 Call by value and call by reference
¤y ~
E dO
9e/a" |
$9-_h | bcH- } Zb"- ~ a ~ b |4 b ~F~ b ~
Oe ~ a°¡ }6~ a" ~ e | bcb ~ _ }S|
9O
OeF- } m®
b- ~ a ~ b
dO_3a ~ -
-d ~ ¸ ~
a" ~ dO
OeGa" |
e0Z»_ ~G -d9Za ~ ?Oa" ~
Oa"-0Ua" |
|4 a" ~
| b"H- } Zb- ~ a ~ b8HUµ ~ _Va -
o--_ |4 a" ~ e0- } Zb- ~ a ~ b0I´1
Ha"O_ 0¡D =~ e0-
H } ~ ~
a
dO
OeGa" |
O_=a"9ZaeB9-
O ~ a" ~f -d ~ _ |4 a" ~ £be0Z } Zb- ~ a ~ b"_F¦¿ ~ b ~ _-
~B· - } ~
void increment ( int & i )
{
++ i;
}
int main ()
{
int j = 5;
increment ( j );
std :: cout < < j < < "\ n" ; // outputs 6
return 0;
}
´ | b"H- } Ub- ~ a ~ b |4 dO
OeGa" |
{Z_=b ~F~ b ~
Oe ~ a¢¡ }6~ =~ 9 D~ .BAj>*>wsBl07srCG,1L-,FCG,F!I.G,T_ ~ ®
H-
ja"eF_ acb ~ _ }6~ eGaIa | a"9Za } Zb"- ~ a ~ bF dO - ~
ja"¡D =~ _"F¡a"9Za =~ JgAj)F)ac ~8} Zb"- ~ a ~ b
¡Hb ~G~ b ~
Oe ~
´ a" ~o| b"H- } Zb"- ~ a ~ b_
| a |4 b ~F~ b ~
Oe ~ a°¡ }6~ =~ 9 D~ ./Aj>*>wsBlF7 s°P Aj>w:»,<_ ~ H-
aceF_F¬
=~+} -_c_
ac ~v} Ub- ~ a ~ b ¡ Zd ~
O ~ be0Z»¡¥b ~F~ b ~
Oe ~ 6a" ~ -Oib ~ _3_ |4 ± | b]¹b ~G~ b ~
Oe ~
a | ³ ac ~ eF- } Zb"- ~ a ~ bk_NdO_ ~ ya |
Oa"- ~ a" ~| b"HZ } ZbZ ~ a ~ b0¸dO
9 ~ bHeF-£®* ¡® Zd ~
_ ~ HZ
a"eG_F(a_ a" ~f -d ~f|4 a" ~ e0- } Zb- ~ a ~ b a"9Za_dO_ ~ | b
Oa"-0Za" |
K
¨ ~ -_cekb"dO ~ _va |} -_c_h } ZbZ ~ a ~ bf ¡b ~F~ b ~
Oe ~H|
O¡< a" ~N dO
OeGa" |
$
d ~ _ra" |
-eGacdZ¡
~F~ O_Va | e9-
O ~ a" ~ eF- } Zb"- ~ a ~ b -d ~ ´ a"9ZaV_8
| aVa" ~ eF-_ ~ (eF-O ¡ -d ~ _
| b ~ «9~/· £ ~ 4_c
Oe ~ a- |m _¦Zbc ~ bVeG-_c_ |4 e0Z } Zb- ~ a ~ b"_=±1 -d ~ _
AD!MNb -d ~ _
O_3a ~ -
|4 -d ~ _ |
O¡ ³
4.2.3 Return by value and return by reference
¨= ~ b ~ a"dib"
Ea¢¡ }6~H|4 dO
OeGa" |
Ee0-
E ~ b ~F~ b ~
Oe ~ a¢¡ }6~ -_ =~ 1I
9eBEe0-_ ~H=~ 9 D~
CF,0#1:C0!?sBl07srCG,1L-,FCG,F!I.G,H_ ~ H-
a"eF_]± | a" ~ b _ ~ =~ CF,0#1:C0!^l07P Aj>q:§, ³ ¦´ a" ~f dO
9e/a" |
{b ~ a"dib"
O_
Tb ~F~ b ~
9e ~ a" ~k dO
OeGa" |
<e0- ~/· } b ~ _c_c |
½_+-
½ -d ~ ac_ ~ §-
O =~ e0Z
dO_ ~ a ~ b ~GD~ b
-d ~ _Zb ~v~/·(}S~ eGa ~ ?
¨O_ ~ -
O_acUaVa" ~ dO
OeGa" |
Ta"_ ~ e || _ ~ _
±Q ¡NdO_c
9vb ~F~ b ~
9e ~ a°¡ }6~ _ | b8
| a ³ ~ a" ~ b
a"_?e0Z } Zb- ~ a ~ b"_?-
Ovb ~ a"dib"
-d ~ Zb ~ -d ~ _ | bKb -d ~ _F ~ eGa" |
²² Z
9 ~ eGa" |
| eFdO ~
jaa" ~ _ ~ e | e ~ _ | b+_ | ~h|4 a" ~|}6~ bUa | b"_ |
dO
O9- ~
a"-§a¢¡ }6~ _F6dia |
O¡
|U
=~ d9
O ~ b"_ra-
O¥a" ~ ~ eZ
9_cna"9ZaHZµ ~ _=_cdOeeB | e ~ _ }S| _c_c9 ~
¼
_e |
OeGb ~ a ~ ~/· - } ~ U ~ aIdO_Ie |
O_c ~ b§a" ~8| |m
O D~ b"_c |
|4 a" ~8 dO
OeGa" |
increment
a"9Za ~/· ZeGa"¡ | ~ _ac ~ ~ 9 | b |4 a" ~o} b ~ ®&
OeGb ~ ~
a |}6~ b"Za | b
¬{ak
9e/b ~ ~
ja"_¹£a"_
++
-d ~} Zb- ~ a ~ b-
O{b ~ acdObc
9_a-_-
-d ~
int & increment ( int & i )
{
return ++ i;
}
´1
½ ~
~ b-* =~ dO_3a+HUµ ~ c_ dib ~ a"9Zah-
/~ ·(} b ~ _3_c |
4
| b ~F~ b ~
Oe ~ ¢a ¡ }6~ "a 9Za =~ b ~ a"dib"
b F~ ~ b"_a | <
!I24!?sr#c,FW¹JS24CGADC07 | ~ e/a0z¨ | d9
O ~ "b _ra-
O 9Z a¥a ~ 6
~ eGa_F ~ adO_
} | b"Z bc¡ | e |
O_c ~ ba" f
~ | |m
O dO
OeGa" |
?
(1]I
(¦
int & foo ( int i)
{
return i ;
}
¨=9_N_T-_rµ(
O | bTacb | dO9 ~ _c
Oe ~ "a ~| b"HZ } ZbZ ~ a
9Za ~ _G§¨=O_§ ~ Z9
_Ka"9Zaa" ~ Zc_ _ | eGZa ~
dO
OeGa" |
he0Za ~ b"T
~/· } £b ~ _f±1_ ~F~ ~ eGa" |
i ³ ´ §=~
m| b"a ~f| b ~/· - }
~ b i cb d9
O_ | dia 4
| _ce |}6~ ~
pa" ~
h ~ | bc¡]_ b ~G~ k
Z
9ha" ~ Z9ib ~ _c_
~
int i = 3;
int & j = foo (i );
// j refers to expired object
std :: cout < < j < < "\n" ; // undefined behavior
a" ~ b F~ ~ b ~
9e ~
b
b"_a | -
~B·(} b ~ | ~ e/a09-
O{a" ~ b ~ _cdOa"
9h ~ | b |4 "a f
~ } b | b"-
j ~G~
dO
O ~/¯
~ ?
_
¤y ~
~GD~ b
¡ | de/b ~ Z a ~ -
Z-_ | b-
| ~ eGa0 ~
O_cdib ~ a"9Zaac ~f| ~ eGa
Reference Guideline:
| ~ _
| a ~B·(} b ~ ~F| b ~ a" ~ Z-_B
Oi
¨ ~ e | } ~ bdO_cd9-£¡
| ace ~ _ | Za" |
O_ |4 "a ~ ~F~ b ~
Oe ~ fdO ~
~ -
ON_c_cd ~ _V Ub"
(®
4.2.4 More user-defined operators
~ a u_¦ ~ a¦-e"µha | a" ~ -OOa" |
Rational numbers: addition assignment.
b
i
d
v
b
3
_
c
a
"
b
O
d
G
e
a
k
1
´
"
b
| |
~G
| ~ bfa |{¯i·<| dOb - ~ Za3a ~ } a
rational
a"O_=_ ~ e/a" |
? =~
~F~ a | -O¥a =| eB9Zb"-eGa ~ bc_ |
O¡D
¼
_
a" ~v} b ~G | dO_ dO
OeGa" |
9a" ~+| b"H- } ZbZ ~ a ~ b
increment
b ~F~ b ~
Oe ~ g-
O¥a | ~ e | } -
a a"Ha" ~ dO_cd9-K_ ~ HZ
a"eG_ |4
+= =~
-_b ~F~ b ~
Oe ~ ¬
-_c_34
O ~
a |}S~ bZa | b
9
O
O |4
b | ac ~ ~ 4
dO_3a ~+} -_c_ ~
Z_
a
-_ | b ~ acdObc
¥a" ~ b ~ _cdOa
// POST : b has been added to a ; return value is the new value of a
rational & operator += ( rational & a , rational b)
{
a .n = a. n * b.d + a. d * b.n ;
a .d *= b .d;
return a ;
}
¨ ~| a" ~ bIZbca"O ~ a"eZ_c_c4
O ~
ja |}6~ bZa | b"_Zb ~ _cTZb0mZ
9 =~ |
ua»_3aKa" ~ ~ b V
~ ~/· ®
ac ~ Zbca"O ~ a"eV-
O¹b ~ Za" |
9- |}6~ bZa | b"_9_ceFdO_c_ ~ k
~ eG"a |
i²
} eF£a"¡D»¨ | ~ a" ~ b £a"
=~
|m 9 D~ hd9_ ~F dO§_ ~ a |4|}6~ bZa" |
O_ |
¥b"Za" |
9-6
d9 ~ bc_F
~ a¥dO_{ | | µZa b | b- |
Oe ~ | b ~ a"ac ~
Rational numbers: input and output.
d O
OeGa" |
H
9- ~
b ~/} -e ~ T ¡
-
ONa" ~ dO
OeGa" |
TeF-
b -e ~ H¡
add
operator+
add (r, s) G~ }
a"* =~ eF-
_ }6| a }6| a ~
a"Z6 } b |UD~ ~
a"_G¬
O_3a ~ Z |4§ b"a"
O
r + s
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < "\n" ;
{
~ =~ {b"Za" ~ b b"a ~
std :: cout < < " Sum is " < < t < < "\ n";
°dO_3aµ ~=~ Ub ~ |
9a | b dO
99- ~
a-a°¡ }6~ _F¦¼ a ~ bZ1 =~ -
jaa | a"O
iµ |4 b"Za" |
9-
dO ~ b-__3
O4 ~ -d ~f b | a" ~ _ ~ a]`Z
9¥
| a-_=a =|¹ -d ~ _ b | a" ~ _ ~ a f
(b | 9Za =~ 9 D~ |
~ Z |mD~ g¡ | de0-
4d ~ _c_acUa- =~ 9 D~ a | | _a |T|UD~ bc | -
a" ~o| dOa } dia |}6~ bUa | b
´1
p9_ceFdO_c_c
Oa" ~¥| dia } dia |}6~ bZa | bk
~ eGa" |
²² =~ 9 D~
<<
Zb"4d ~ a"9Zaa" ~| dia } dia
_3acb ~ - } -_3_ ~ a | -
Ob ~ a"dib"
~ ¡¥a" ~| dia } dia |}6~ bZa | b¹dO_3a ~
-
-d ~ 9_3
Oe ~ ac ~v| dia } dOa |}6~ b"Za | b | O ¯9~ _ a" ~ _3acb ~ ZV¿
O¹b ~F~ b ~
Oe ~ a¢¡ }S~ _
Za | dib
O_ }6| _c-1Oa"O_
e0-
~ Z_c¡{ ~ |
~ ¬ =~ _3 } ¡ } Z_c_-
Ob ~ a"dib"
a" ~h| dia } dia
_3acb ~ - ± | _ ~
a¢¡ }6~ _
³ -_b ~G~ b ~
Oe ~ ¬
std::ostream
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational r)
{
return o < < r.n < < " /" < < r .d;
}
¨ ~ b ~ _
| b ~ - _ |
Ea | _3a |} ~ b ~ ¬ | ba" ~
} dia0 =~T=| dO
Ea" ~ _"- ~T Z_cO |
£µ ~
a | b ~G} - e ~ "a ~ a =
ac_
-
O
¡za" ~
|
} diaf_3aZa ~ ~ std::cin >> r.n;
std::cin >> r.d;
_c
O4 ~ _3a"Za ~ ~
ja
std :: cin > > r;
±&-
Oa" ~ _c- ~+| b
ac ~
} dia |4 ³ ¼D-
? =~
~G~ a |k} -_c_]-
Ob ~ a"dib"
a" ~
} dOa_3acb ~ -
s
± |4 a°¡ }6~
³ -_fHb ~F~ b ~
Oe ~ k´1
<-O9£a" |
? =~ ¹dO_3a } -_c_]a" ~ bZa" |
Z
dO ~ b
std::istream
a"9Za =~v Z
a=a | b ~ --_hb ~F~ b ~
9e ~ g_c
9e ~ a" ~
} dOa |}6~ bZa | b9-_=a | | 9 ¡Ta"_ Zd ~
¨ ~{|}6~ bZa | b ¯ b"_3ab ~ Z9_a" ~
d9 ~ bZa | b b | a" ~ _3a3b ~ - | |m=~ ¡\_ ~G} ZbUa"
O
e9Zb-eGa ~ b0SZ
9 ¯
9-£¡oac ~ ~
| T
9Za | b0V¨d9_G =~ e0Z
b ~ -b"Za" |
9-?
dO ~ b
|
~ |
¡ ~
ja ~ b"
9 | b ~/· - } ~
1/2
// POST : r has been read from i
// PRE : i starts with a rational number of the form " n /d"
std :: istream & operator > > ( std :: istream & i , rational & r)
{
char c ; // separating character , e .g . ’/ ’
return i > > r.n > > c > > r.d ;
}
´1
¥e |
jacb-_ra a |
(a"O
O4_ e0-
o | b |
Oi ~ i ac ~ dO_ ~ b ~
ja ~ bc_=ac ~ e9Zb-e/a ~ b
operator<<
_ ~ d ~
Oe ~
ª
b a
b
+bUa" |
9-g
dO ~ b0¼
_ | =~} b | Z9¡k |
a -
a a |
© A/B ~ } | } ~ |
-eFe ~G} a
-_fTb"Za" |
9-»
dO ~ bf-_ | dibv
} dia |}6~ b"Za | b] | ~ _Gh¨ ~ b ~ Ub ~ ~ eZ
9_cT_a |
3.4
~ - £a"¥_cdOe_c_3d ~ _Fidia =~f=|
aO_3eFdO_c_ac ~ ~ b ~
~ a+dO_+e |
9eGdO ~ a"O_f_ ~ eGac |
£a"<T ~ ZdOac ¯9~ D~ bc_c |
|4 b | bZ (¤yUa+HZµ ~ _
a"O_ D~ b"_c |
~GD~
o
Oe ~ b _¦a" ~
-eGa8acUaV
Nac ~
dO
OeGa" |
?Da" ~
~G a¢¡ }6~ _d9_ ~ ~/· -e/a"¡
main
µ ~ -
Za | TeFª dO
O9- ~
ja-Sa¢¡ }6~ _cdOe-_
©
int
(1]I
(¦
1´
a" ~ _ } £b"a |4 ~ eGac |
(² |
< | OdOZb"FZa" |
? =~ -eGacdZ¡_ } £afac ~} b | b-
ja |
a"ib ~F~¯ ~ _F¬ ¯ ~
a"9Zae |
a-
9_a" ~ ~/¯
Oac |
|4 a" ~ _3acb"dOe/a
?Z
O
rational.h
rational |
£a"k ~ eFZbZa" |
9_ |4 a" ~|UD~ bc | - ~ |}6~ bZa | b"_G¸ ¯ ~ rational.C a"9Zae |
a"-
O_¦ac ~ ~G¯
9w®
a" |
O_ |4 a" ~ _ ~+|}6~ b"Za | b"_F¸ ¯
9-¡D( ¯ ~
a"9Zae |
ja-
O_=a" ~ H-
} b | b"-
userational2.C
¼ a§a" ~ _c- ~ ac ~ =~} dia | dibI
~G a°¡ }6~
-
Oa" ~8|}S~ bZa" |
9_ |
ha§
a |
9- ~ _ } -e ~
rational
| bc ~ ba | D| }6| _c_c£ ~
9- ~ eF-_c ~ _F
b"eF_ ~
-_3µ _¡ | d¥a | -eGa"d9-¡T
ja ~ bZa ~
·i~
ifm
a" ~
~G bZac |
9-6
dO ~ ba°¡ }6~
a | a" ~ HZa"{ObZb3¡oacUa¡ | d9 D~ 9dOa
bceF_ ~
·i~
_ | a"9Za b | bZ i²] ~ |m e0-
{ ~ e | } ~ HdO_c
O¹a"O_=£9b"Zbc¡D
Á
// Program : userational2.C
// Add two rational numbers .
# include < iostream >
# include < IFM / rational .h >
Â
Ã
ÄÅ
Æ
int main ()
{
// input
std :: cout < < " Rational number r :\ n";
ifm :: rational r ;
std :: cin > > r;
Á
0Á Á
Á"Â
Á"Ã
Á3ÄÅ
std :: cout < < " Rational number s :\ n";
ifm :: rational s ;
std :: cin > > s;
Á
Á"Æ
Á
// computation and output
std :: cout < < " Sum is " < < r + s < < " .\ n" ;
Á
Á
 Â4Á
return 0;
}
Program 31:
Á
Â
Ã
ÄÅ
Æ
J?CF2GRD)4?:S)-,FC/Aj#1'324!Aj> Y
// Program : rational .h
// Define a type for rational numbers , and declare
// operations on it .
# include < iostream >
namespace ifm {
// the new type rational
A%
3><HF"-+%5#(H!5970)LB
#&3)+
"
-
#E%.CHI>:;G4
,1)+.
<,%7=,AKG
6$,%
3G?%!#&%.
#&%.3>A6$#E%.C; N-+N;%!)L
operator+
,AE6#?9#E%.M5;
4>E>&")+
"0B4>J#&3)L
r + s
"
?)+-LH+/, #E%.)+B #CHI4
">A.
4 OA%(#"*">1)'4G#&3)L
O(0;*8".>
N?-+B.HI5#.; 5# HI<*")5)5B
; O
struct rational {
int n ;
int d ; // INV : d != 0
};
Á
0Á Á
Á"Â
Á"Ã
Á3ÄÅ
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b );
Á
Á"Æ
Á
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a );
Á
Á Â Â4Á
Â0Â
Â0Ã
ÂGÄ
// POST : a has been read from i
// PRE : i starts with a rational number of the form " n /d"
std :: istream & operator > > ( std :: istream & i , rational & a );
}
Program 32:
Á
Ã
// Program : rational .C
// Define operations on the type rational
# include < IFM / rational .h >
Æ
namespace ifm {
Â
ÄÅ
Á
0Á Á
Á"Â
Á"Ã
Á3ÄÅ
Á
Á"Æ
Á
Á
Á Â
Â4Á
Â0Â
Â0Ã
ÂGÄÅ
Â
Â0Æ
J?CF2GR4)?CGAj#1'324!Aj>Y%
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b)
{
rational result ;
result .n = a. n * b.d + a .d * b. n;
result .d = a. d * b.d ;
return result ;
}
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a)
{
return o < < a .n < < " /" < < a .d;
}
// POST : a has been read from i
// PRE : i starts with a rational number of the form " n /d"
std :: istream & operator > > ( std :: istream & i , rational & a)
{
char c ; // separating character , e. g . ’/ ’
(1]I
(¦
Â
return i > > a .n > > c > > a.d ;
Â
}
Â
Ã
}
J?CF2/RD)?CGAj#1'r24!Aj> Y
Program 33:
¿ ~ b ~ _-
/~ · - } ~ b"dO
|4 ac ~]} b | b-
Rational number r:
1/2
Rational number s:
1/3
Sum is 5/6.
4.2.5 Const-types
~ afd9_]e | ~ -e"µa | a" ~ -OOa" |
a" | dO4Eac9_ |}6~ bZa | b |~ _T!I2D#¹
a
~ eF ~
OeG¡ -
9Za"e=
¹¡ | dNT4a_3d94
-
j¡ F¡S¬
|}6~ bZa
~
O$a |
~ _3aa |
| b | b]bZac |
9-
dO
eB9-
O ~ a" ~N -d ~ _
_ }6~G~ Td } a"O_ |}6~ bUa
~ b"_ b | b | bZ (+¼
£®
|4 £a"_e0- } Zb"- ~ a ~ bc_Fa" ~
| b¡d9_3
Ovb ~F~ b ~
Oe ~ a¢¡ }S~ _
// POST : return value is the sum of a and b
rational operator + ( rational & a , rational & b )
{
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
´1
O ~F~ ?Va"O_ D~ b"_3 |
\_e | bcb ~ eGaNZ
9 }6| a ~
ja"-£¡ -_3a ~ bka"9-
a" ~o} b ~G | dO_ |
~ 8_c
Oe ~ a" ~
Oa"-0Ua" |
|4 | b"HZ } Ub- ~ a ~ b_ |
~ ¡e |} ¡
O °dO_3av24!I,+Z9ib ~ _c_FDbZa" ~ b¦a"9-
¥#1;]2
Zd ~ _I-_»
a" ~ ~ ~ br® _ ~ e |} ¡va"9Za§aUµ ~ _ } -e ~ dO
O ~ ba" ~ e0Z£®1¡® -d ~ _ ~ H-
ja"eF_G
int
z a" ~ _"
Ok__cHZ6
{ac9_ ~/· - } ~ ¡ | deF-
H-4
~ a"9Za ~ ~ b3® _ ~ e |} ¡
D~
e0-
~h} b ~ aca¢¡ ~B·(}6~
O_c D~
_3a3b"dOeGa"_a"9Za]Zb ~ | b ~~ Z | bZa ~ acZ
¸?
ze |
acb"-_3a0
rational
e0-?¡Hb ~F~ b ~
9e ~ _ -_3a | b¹Aj>*>»a°¡ }6~ _F ~GD~
a" ~ | _3ae | } e0Za ~ |
~ _F
| bca"dO
9Za ~ £¡DVa" ~ e0- } ZbZ ~ a ~ b"_d9_rak ~ -d ~ _kdO
O ~ bNe0- ¡b ~F~ b ~
Oe ~ _ |=~
e0-
a b"a ~ a" ~~/·(} b ~ _c_c |
b
- } ~ ~GD~
Zb
Zb"U ~ _ |4 a°¡ }6~
a + b + c | ~/·
a, b, c ~
±
¡ ³ ac1Sa" ~ -_3a ~ b D~ bc_c |
T4ja =| bcµz
| dOb+ }O} e0Ua" |
?¸Saf | ~ _f_ |
rational
b
b
i
²
|
| b ~/· Z } ~ _3
Oe ~
Ta"O_ } b | b"- =~ e0- operator+ a"T -d ~|}S~ b-
OO_
|
O¡D
~ ~ _c_ | | dO_±1-
O¹dOe< | b ~ Z
9 ~ b | dO_ ³ } b | 9 ~
b ~ H-
O_FSac | dO4?¬]
} -_3_c
O
a" ~} Zb- ~ a ~ b"_H-_Hb ~F~ b ~
Oe ~ _F =~ Aj>*> 24; a" ~z|}6~ bZa | bTa | e9-
O ~ a" ~ -d ~ _ |4 a"_He0-
} Zb- ~ a ~ b"_8
oa" ~
¯ b"_3a } Ze ~ ~GD~
¥ a"9Za=9 }O}6~
O_ dO
O
a ~
a" |
Z¡D»´1
dO
OeGa" |
O_Va"9ZaUb ~
Zbc ~ b
a"9-
a" ~ Z |mD~
SaeF-
~ -_c£¡9 }O}6~
a"9Za =~ | O ¡o_ | ~|4 a" ~ e0-
operator+
} Zb- ~ a ~ b"_=_c } ¡¹ ¡{T_3aUµ ~
| aHZµ
Ok_cdOe<T_3aZµ ~ __
a" ~+} b" ~ b ~ _ }S|
9_39a¢¡ |4 a" ~} b | b-T ~ b0 |4 e | dib"_ ~
9diaa" ~ eG ~GD~ b } b | b"-T ~ b=e0-_ac ~v} b | b-TT
Oh-
O4d9- ~]| b ~ } ~
~GD~ b }6| _3_c9 ~
_=h-{ |UD~ (_c
Oe ~ a=
jacb | 9dOe ~ _
´1
{ac9_ _ } b"a0ja" ~ Z |mD~ ~ eF ~
9e/¡ ¯i· ª | b
operator+
©
~/ }S| _c_c9 ~ _ | dib"e ~v|4§~ b3b | b"_F
´ a"O_]_ | dO
OO_fa || U_racb-eGa | bv¡ | dKK ~ b ~ _v-
~/· - } ~ ~ b ~ af_f_c } ¡ b |
OHa |
|mD~ a | e0Z£®1¡®*b ~F~ b ~
9e ~ _ ~ HZ
a"eG_F¸4a" ~ e | } ~ bI9-_¦
| e9-
Oe ~ a | ~ a ~ e/aa"O_ ~ b3b | bV_3
Oe ~
a_ } dib ~ ¡{_ ~ HZ
a"eF-1= |
O_c ~ bac ~ dO
Ubc¡_cdiOacbZeGa" |
|}S~ bZa | b | b
a" ~ a¢¡ }6~
rational
b | ~ eGa" |
i²
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
Z
94
9ha"O_=a |
rational operator - ( rational & a)
{
a .n = - a .n;
return a ;
}
9-_ib-_3a"e±&-
OdO
O ~ _cb ~ ³ e |
O_ ~ d ~
Oe ~ ¬Na" ~T~/·(} b ~ _3_c |
V_3a"V9 D~ ac ~ _c- ~
-a
-d ~ -_ ~F| b ~ j9dOa8a O9 D~ a" ~ -OOa" |
Z ~GºS~ e/a |4 eB9-
O4
Ofa" ~ -d ~
|4 I¤ ~ 9 D~
a
-eFeG ~
aZ¡(ªeGb ~ Za ~ e | } ~ a ~ ¡TO ºg~ b ~
ja |}S~ bZa | bF
©
¼
_fH-
¡ | a" ~ bfO4(®& ~GD~ } b | b-TT
O¹-
O4d9- ~ _FKv |ºg~ b"_T ~ e9-
O_c acUa } b |}6~ b"¡$dO_ ~ ^Z |m _ha" ~ e | } ~ ba | ~ a ~ eGakdO
9 ~ _3b ~ \e9-
O ~ _ |4 -d ~ _¹-_k
Ea" ~
} b ~G | dO_ ~B· - } ~ ¨= ~ ~ h_ a | J?CF24W¥'*)-,ha"9Zahe ~ bcaZ
-d ~ g
| a= ~ eB9-
O ~ ?O-
O
a" ~
~ aac ~ e | } ~ b»eB ~ e"µ ~ ac ~ b =~ µ ~F~G}k| dOb } b | T_ ~ ´1
ha" ~ e0Z£®1¡®*b ~F~ b ~
9e ~=D~ b"_c |
|4 ac ~ dO
9Zbc¡H_cdiOacbZeGa" |
|}6~ bUa | b0(a" ~ ± -_ ~ ³ } b | T_ ~ e0-
o ~ 4 D~
Z_ | |U _F dO_c
Oa" ~
µ ~ ¡ =| b"
const
rational operator - ( const rational & a)
{
a .n = - a .n ; // error : a was promised to be constant
return a ;
}
´1
Ne | }
Oa"O_ Zbc-
a |4 ac ~|}6~ b"Za | b04a" ~ e | } ~ b (_3_cd
O | diaa" ~ T_3aZµ ~ ¤ ~ e0-
a" ~
¯O· a ¡ ~ a" ~ b |
OgZeµoa
| b ¡{
acb | OdOeF
Ob ~ _cdOa ZbcZ9 ~ µ ~
operator+ Z |mD~
(b | a" ~ _3acb"e/a"¡ dO
OeGa" |
Z }6|
ja |4 ~G Ia"O_ } b | T_ ~
-
O$a" ~ b ~ Zb ~N} b | b-TT
9{-
O4d9- ~ _
dO_ ~ a"9Za |
uah9 D~
~ -
~ bcb | b ~ c_ _"- ~ }S|
a3®
| e0-£®* ¡j® -d ~ _ ~ H-
aceF_F
~ e Z
9_c _h_cd 6
} ~ b « d | dO_F
£aH±¢¶dO_ ~
a | ~ _cdOeB
(1]I
(¦
-
O4d9- ~ 4dO
ja"(a" ~
µ ¡
b" Z_V-O ~ ¹
²
D | a" Za ~ ¡¹£a"__cdOeFe ~ _c_V
Tv ³
const ~ =|
¼
_ | i
| | i¡ | b"e ~ _d9_a | HUµ ~ dO_ ~v|4 a" ~f} b | T_ ~ ~ e9-
O_c Vdiaa" ~v | ~]}S|
a |4
O4(®& ~/D~ } b | b"-TT
O -
O4d9- ~ _K_§a | HZµ ~ ac ~} b | b-T ~ b u_6 ~~ -_c ~ b0¸a" ~ e | } ~ b?_
| dib b" ~
9HZ
9He0Z
T ~ } d9_a | D| TH-
j¡¹a" ~ ®&e |
O_cdOT
O ~ b3b | b"_F¨ ~ const ~ e9-
O_c
_fµ ~ oe ~ e"µO4£a0¬
¡ } b |U O
O¥Z9Oac |
9-§b ~ OdO
O9-
av9Za±*a" ~
µ ¡
b" ³ =~
const ~ =|
HZµ ~ _cdib ~ a"9Za
Oe |
O_c_3a ~
OeF ~ _h
Eac ~T | ~ 9Za_ ~ a{±*a" ~N} b | bZ ³ Zb ~ -dia | HZace0-£¡
~ a ~ e/a ~ ?
Definition.
const
´ _Z
¡Ha¢¡ }6~ ia" ~
_+ac ~ .G24!?)F#&s 0:»Aj>q' t,BMa¢¡ }6~ ±1e |
O_3ar®1a¢¡ }6~T| b_c | bca ³ |4
#17mJ6,0I¨= ~ e |
O_3ar® d9- ¯9~ D~ b"_c |
|4 Z_ ~B· e0-e/a"¡]a" ~
-_ ¨= ~N|
O¡O ºg~ b ~
Oe ~ _va"9Za-
~/· } b ~ _c_c |
|4 e |
a"_ Zd ~ ±1
| ac ~ b =| b"O_F£a_ve |
O_3a-
ja ³ ¸a"O_v_ | dib
~ ac ~ b =~ µ ~F~G} a"9Za } b | T_ ~
´ §=~] b"a ~f| b ~/· Z } ~
-
O a"_ ~ _va" ~
"_ - ~I Zd ~ b"-
O ~ Z
9
O_3a3®*a¢¡ }6~ _+
| ah- |m=~
} b | T_ ~ Z
9ac ~ e |
: !MO,FCm>q7'Q!SR
g
d9
OeGac |
9-a¢¡
a | e9-
O ~
} ~ bfe ~ e"µ(_
const int n = 5;
n = 6;
"a ~ e | } ~ b I_c_cd ~ -
~ bcb | b ~ _c_c- ~ e |
9e ~ b"
O
O{a" ~ -_c_c4
9 ~
a
»_3
Oe ~
9-_
n = 6
n
a" ~ e |
O_3a3®1a¢¡ }6~
const int
-d ~ _
_3a3®*a¢¡ }6~ ¹dO_3a- 0¡ _ ~
Oac- ~ ?»¤<bca"
O
|4 e | O
const int n ; // error : uninitialized constant
_ ~ D-±&-
O{HZµ ~ _
| _ ~
O_ ~ _c
9e ~v=~ e0-
~GD~ b
-_c_c4
-d ~ a |
Za ~ b ³
n
4.2.6 What exactly is constant?
~ ad9_=e
a¢¡ }6~ a"
_c ~ b=_ | ~ -d ~|4 a¢¡ }6~
O´ a" ~ d9
O ~ b"£¡(
Oa¢¡ }6~ | O
const
~
Ha" ~ -d ~ _=-_3_ | eFZa ~ £a"H+e |
O_3aZ
ah2(l
-,G.0#& | b ~/· Z }
b T_ ~ _]a"9Zafa" ~k Zd ~k|4 a" ~¹| ~ eGav ~ O
O<a" ~k
const int n = 5 } |
~ | 9 ¯~ K ¤ ~ H0¡<±&-eFeG ~
aZ¡ ³ acbc¡¥a | e ~ ZafZb | dO
Oa"O_ } b | T_ ~
9- ~]| bac ~f| ~ eGa0i9dOa=a" ~ e | } ~ b 6e0Ua"edO_F¬
_
| a+b ~F~ b ~
Oe ~
~ jac ~ ~ eGZbZac |
Zb"Z9 ~
| a
n
¡dO_c
9HZ
| ac ~ b
const int n = 5;
int i & = n ; // error : const - qualification is discarded
i = 6;
4
.
4 /
A* ;.?)+-LHFHI> L><.4>EG?="
065871,A)LB
*3
<=
*3@DC6##E)
#&%%:9CB
3G?%(#E>;#?)
#E%.MG*8>E>J3G9NE#&3G4*"!"#%$&('*) +,-#.%/0213
B>&2>&B.G?%=
?@*6BC)L' #E%.C#:70; > )()L' 7F#:70;+/5')#E%N#
HI4G?%
3>JH=O
H!N#&#E
7/%>G)L.>J#?5#1@L*"B.275,47DO
¤ ~ e0-
O
| a dO_ ~ -
~/· } b ~ _c_c |
|4 a¢¡ }6~
a |
9£a"- ~ ± | b=-_3_c4
Na | ³ Z
~B·(} b ~ _c_3 |
|4
const
¢a ¡ }6~ S_c
Oe ~ acUa =| dOeGb ~ Za ~ k | 9 ¯ U ~ --_ | bf-
| ~ eGa
a"9Za -_ } b | T_ ~ ¥a |
~ e |
O_3a-
ja0
Ta" ~
| ac ~ b 9-
OK-
T -d ~ ±&-eGa"d9-¡DD-
¡ ~/·(} b ~ _c_c |
³ |4 a¢¡ }S~
_a" ~ --_
const
|4 Z
| ~ eGa069dOafa"9Za | ~ eGav_h!I2D#+
~ e ~ _3_"Zb"£¡e |
O_3a-
ja+ac_ ~ h¨= ~ e |
9_ra3® dZ ¯ e0Za" |
Ta"O_8eF-_ ~ _8 ~ b ~ ¡T } b | T_ ~ a"9ZaVa" ~| ~ eGa _ -d ~
| a8 ~ | O ¯9~ #&%(CF24:9RD%a" ~
--_
d ~ _3a" |
?¦¿ ~ b ~ _-
~/· - } ~ a"9ZadO_3a3bZa ~ _a"O_ }S|
a0
int n = 5;
const int & i = n ;
int & j = n ;
i = 6;
j = 6;
//
//
//
//
i becomes a non - modifiable alias of n
j becomes a modifiable alias of n
error : n is modified through const - reference
ok : n receives value 6
¿ ~ b ~ =~ |
| ak9 D~ ze | O
_3a-
ja2(l
-,G.0#&=9dOaN<e |
O_3aZ
a,BX0J?CF,0)F)G'r24!
b
_
c
c
_
a
¢
¡
_-_ | e0- ~ ¥.G24!?)G#&srCF,1LZ,FCF,F!I./,0
/~ · } ~
| 4
|
} ~ const 6
4.2.7 Const-references
±1
9- ~ ¡
³ ¼
i
§bc_3a |4 Z1-a" ~ a¢¡ }S~
9- ~
_ } Zb-
ja" ~ _c ~ kZ_
± ³ 41 ~ =~ ~ ae |
const
const
}O}6~ Zb+
b
-d ~ _ |4 b ~G~ b ~
Oe ~ a¢¡ }6~ |
O_3a3®1b ~F~ b ~
Oe ~ _¹Ub ~kD~ bc¡d9_ ~F dO -
O |4 a ~ E
e | ~ ~ a¹dO_e | ~ -e"µ$a || dib Z_3a ~ b D~ b"_c |
|4
b¹b"Z"a |
9-
dO ~
operator+ |
_" ~ ª D~ b"_c |
_ a"O_F¬
©
O_3aZ
a
~ Z£®& ~
b"_F<´*a"_
// POST : return value is the sum of a and b
rational operator + ( const rational & a , const rational & b ) {
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
¨= ~h ZeGa]a"9Za
a"O_e | } ~ _e |
¯ b"T_acUa =~ Zb ~
| a]eZ
94
9Nac ~ -d ~ _ |4 a" ~h| b"H-
} Zb- ~ a ~ b"_ a | b b a"O
kac ~ | i¡ |4 a"O_ dO
9e/a" |
?Vdia8a" ~ b ~
-_8-
| a" ~ b } b | 9 ~ ¶a"9Za
=~ }O} Zb ~
ja"¡¥99
a
_ | D~ ¡ ~ a0¬ } -_c_3
O } Ub- ~ a ~ b"_ ¡¥b ~F~ b ~
9e ~ b ~ dOb ~ _ -d ~ _]-_e0-
} Zb- ~ a ~ b"_FDZ
9a"O_I_ ~/D~ b ~ ¡b ~ _3acb"e/a"_Ia" ~ }9} e0Z9a¢¡ |4 a" ~|}6~ bZa | b0 | bca"dO
9Za ~ ¡Dac9_
_¦
|
i®1_c_cd ~ ¬§e |
O_3a3®1b ~F~ b ~
Oe ~ _
±1
} Ubca"eFdOUb0 | b"H- } Ub- ~ a ~ b"_ |4 e |
O_3ar®1b ~F~ b ~
Oe ~ ®*a°¡ }6~ ³
e0-
{ ~
9£a"- ~ b | b Zd ~ _Z_ =~ 1¨O_ ~ -
O_ a"9Za =~ eF-
bca ~
const int & i = 3;
~ O
Ovac ~ _ce ~
~ _FZa" ~ e | } ~ bSeGb ~ Za ~ _§ a ~ }S| bZbc¡ | ~
-Oib ~ _c_ |4 a"O_a ~ }6| bZbc¡ | ~ eGa8_8dO_ ~ Ta |
Oac- ~ a" ~
HZµ ~ _h_3dOb ~ acUaha" ~ a ~ }6| bUbc¡ | ~ eGa | ~ _h
| a ~/· } b ~
b ~F~ b"_a | af±1_ ~F~ a" ~ ~F~ b ~
9e ~ fdO ~
~|
- ~
³
¨ ~ _"- ~ 9 }O}6~
9_ ~
| b"H- dO
OeGa" |
} ZbZ ~ a
a"Z ~ b | -
¥b -d ~
eGa?a"9ZaK | O_Sa" ~¦ -d ~
e |
O_3a3®*b ~F~ b ~
9e ~ ¦¨=
i
~F| b ~ a" ~ e |
O_3ar®1b ~F~
Z-
Ova" ~
~ e | } ~ b
b ~
Oe ~ acUa
3
~ b |4 e |
O_3a3®*b ~F~ b ~
Oe ~ ®1a¢¡ }6~ _
O£®
(1]I
²
(¦
¼
_+a" ~ b ~F| b ~ a" ~ -£®1
(® |
~ ~/ e ~ _cdOaZ9 ~¹| b ~GD~ bc¡
} Z b- ~ a ~ b |4 a¢¡ }6~ const } dib }6| _ ~ ¬¹' L\a" ~ e0- } Zb- ~ a ~ b+_-
½ -d ~ Ka" ~
Oac-FZa" |
_ D~ bc¡ ~ eF ~
aN± |
9£¡<ac_
-Oib ~ _c_{
~F~ O_¥a | ~ e |} ~ ³ ]Z
9 | a" ~ b _ ~ =~<~ _c_ ~
ja"-£¡ ZgZeµa | eF-£®* ¡® Zd ~
_ ~ HZ
a"eG_F
-_N
~ _ } a ~ a"O_FVa" ~ b ~ Zb ~ _3a"_3a"d9Za" |
O_ ~ b ~ _ } b ~F~ bcb"Z9 ~¥|mD~ b const } Zb- ~ a ~ bIa¢¡ }6~ ´ _ dO
OZ ~
aZ a¢¡ }6~| b8]_3acbcd9e/a a"_cH-( ~ | bc¡+b ~ dOb ~ ~
a"_F
a |~ _=
| a } F¡ |º a | |mD~ a |
(_3
Oe ~ a" ~ _"
O
H9-
O9
O -d ~} Zb- ~ a ~ b"_
const
_=_ | _cH-»± | b ~GD~
|
~/· _3a ~
ja ³ a"9Zaa =|
ua=e | }6~
9_cZa ~| ba" ~ ±1_34ac¡ ³ | b ~ e | _3a"¡
-eFe ~ _c_
a | a" ~| bcH- dO
OeGa" |
} Zb"- ~ a ~ b
a" ~ dO
OeGa" |
| i¡D´1
O ~F~ ?SeF-»¡¥b ~G~ b ~
Oe ~
-OO_ |
~
O9£b ~ eGa" |
K¬Ka | | | µkd } a" ~
-d ~|4 | b"H- d9
OeGac |
} Ub- ~ a ~ b dO
9 ~ b=eF-£®* ¡®
b ~F~ b ~
Oe ~ _ ~ HZ
a"eG_F =~ t Cm)G#9 D~ a | | | µfd } a"_§-Oib ~ _c_IZ
9ac ~
| | µfd } ac ~ -eGa"d9- -d ~
Zaa"9Za-Oib ~ _3_F
9 ~ be0-w®1 ¡j® -d ~ _ ~ H-
aceF_Fia" ~ -Oib ~ _3_ |4 a" ~v -d ~ _ 9Zb" b ~ Oª
©
±&-
Oob ~F~ b"_a | _ | ~]| ~ eGa |
¥a" ~ eF-6_3aZeµg_ ~F~ ~ e/a" |
( 4³
¼
_ | 4£a_ |4 a ~
ke |
D~
O ~
jaa | dO_ ~ a" ~| bcH- } Zb- ~ a ~ b-_ | eF- Zb"Z9 ~ Z
9¹ | O ¡
a"_ -d ~ ±1_ ~F~
Z
³ ¸ bacUa0ia"_ a¢¡ }6~ ¹dO_3a
| a= ~ e |
O_3ar®1a¢¡ }6~
operator- |mD~ |
4.2.8 Const-types as return types.
|
9_ra3®1a¢¡ }S~ _HF¡-_ | }O}6~ Zb
-_
b ~ acdObc
a¢¡ }6~ _ |4 dO
9e/a" |
O_F °dO_3a]£µ ~ -
j¡ | a" ~ b
a¢¡ }S~ _F´1
a"9Zae0-_ ~ 9ac ~
b T_ ~ _ a"9Za=a" ~f dO
9e/a" |
e0Z ~/·(} b ~ _3_c |
ac_ ~ _e |
O_3a-
ja0
const } |
´ a" ~ b ~ a"dib"
ka¢¡ }6~ _¦
| aV]b ~F~ b ~
Oe ~ a°¡ }6~ 4a" ~ d9
OeGac |
Ne0- ~/·(} b ~ _3_c |
N_-
kb -d ~ -
O
~
Oe ~
| a | 9 ¯ U ~ -
j¡ F¡D¦´1
¥a"O_ e0-_ ~ ia" ~
µ ¡
b"_= ~ DZSdia9-_=
|k~Gºg~ eGa0
const ~ =|
|
9_ra3®1a¢¡ }S~ _ac ~ b ~F| b ~v|
9£¡{HUµ ~ O ºS~ b ~
Oe ~ a" ~f dO
a" |
{b ~ a"dib"
O_b ~G~ b ~
Oe ~
| a ~
acUaNak_¥!I2D#H ~
~ b-¡ -\a | b ~G} Ze ~ b ~ acdObc
a¢¡ }6~ ¡
¸ O ~
const
a"O__" ~ £¡ =| bcµ _ | b¹a" ~¥| b"H- } Zb"- ~ a ~ ba¢¡ }S~ _F ae0-
| b¹a" ~ b ~ a"dib"
\a¢¡ }6~ b ~ _cdOa¹
_3¡
a-e/a"e0-¡Te | bcb ~ eGa9dia_ ~ H-
ja"e0Z¡ b |
O¹e | ~
¡
Z_ka" ~ b ~ a"dib"
\a¢¡ }6~|4
¼
_T-
~B· - } ~ ¦ ~ a _¹b ~G} -e ~
rational
const rational&
¬
operator+
const rational & operator + ( const rational & a , const rational & b ) {
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
´1
~/·(~ eFdia"
OHa" ~
_3aZa ~ ~
aFSa" ~ b ~ a"dib"
-d ~ ±*
zac9_feF-_ ~ He |
O_3a3®*b ~F~ b ~
Oe ~ ³ a |
return
k
3
_
_
$
a
"
a
0
e
b
~ }
~
|
~
~ |4 a" ~T dO
OeGa" |
½_
Oa"Z ~ aca" ~N~/·(} b ~ _c_c |
result |m
b ~ eF-=a"9Zaka" ~
9£a"- 0Za" |
|4 E±1e |
O_3a3® ³ b ~F~ b ~
Oe ~ b | Z
p Zd ~ _c } ¡$HUµ ~ _kak-
--_ |4 a" ~ -d ~ Vdiaa" ~ -d ~
d ~ _3a" |
±1
9- ~ ¡
³ _h | eF- ZbcZ9 ~
| _ ~
result
~ | bc¡¥_ b ~F~ ½Z
9 | _ ~ -Oib ~ _c_f ~ e | ~ _]
Z ~
ac ~ dO
OeGa" |
e0-a ~ b"T
9Za ~ _
±1_ ~G~ ~ eGac |
i ]-
O ~ eGa" |
i ² ³ I¨= ~ e |
O_ ~ d ~
Oe ~ _Ia"9Za¦a" ~ b ~ a"dib"
~ kb ~G~ b ~
Oe ~
~ a" ~ -Z_ |4 Z
~/·(} b ~ | ~ eGaFg-
OdO_c
Oa"O_b ~G~ b ~
Oe ~ b ~ _cdOa"_
d9
O ~G¯
~ ~ 9 | b
|4 ac ~f} b | b-
b3b b"_oµ ~ a"O_HZb ~D~ bc¡y9Zb"ya |$¯
O±&-
O =~ e0-
O
| aHb ~ Z9¡\e | dO
ja |
e | } ~ b
|
Zb"
O
O4_ ~ b ~ ³ I_c
Oe ~ ac ~N} b | b"- WAD7 =| bcµ-_h
a ~
O ~ K | b ~B· - } ~ a" ~ ~ | bc¡
a"9Za -_Z_c_ | eGZa ~ $a | a" ~H~/·(} b ~ | ~ eGa_h
| aT ~ 9Za ~ ¡b ~ dO_ ~ ? Vdia |
\Z
| ac ~ b
} Za | bca" ~]} b | b- H0¡k ~ 9 D~ O ºS~ b ~
ac¡ | b ~/D~
eGb-_3K
4.2.9 When to use const?
¤y ~
~GD~ b¡ | doa"O
iµHZ | dia a" ~ }O} b |} b"Za ~ a°¡ }6~f|4 Zb"Z9 ~ i | b"H- dO
OeGa" |
} Zb-k®
~ a ~ b0 | b+ dO
OeGa" |
u_
b ~ a"dib"
-d ~ 6af_ | | } b-e/a"e ~ a | a"O
iµZ | dOa]e |
9_ra3® dZ ¯ e0Za" |
Zava" ~ _"- ~ a" ~ k¼ a ~ bh-*K¡ | d½_c | dO<µ
|U¶ 9Zaf¡ | d -
afa | |¥ a"ac ~¹ ZbcZ9 ~
} Zb- ~ a ~ b0 | b8b ~ acdObc
-d ~ ±* ¡ | dH |
a0a"O_ } Zb-b } T_ ~GD~
{ | b ~ }S| bca-
ja ³ _ | ¡ | d
-_ | µ
|m ~ a" ~ ba" ~]} b | b-
~F~ O_a | eZ
9 ~ a"_ -d ~ Za_ | ~]}S|
a0
¨ ~ gZ_ceb"dO ~ a |k| |U _a"O_G¬
_ ~ e |
O_3a a¢¡ 6
_
b a"O__ S
} | c_ _c9 ~ -
OHZµ ~ _O ºS~ b ~
Oe ~ 9´*a
Const Guideline:
− } ~ ~ G~ D~
- F¡ _HUµ ~ _O ºS~ b ~ O
e ~
¥e |
O
~ Ge ac |
£"a ob ~F~ b ~ O
e ~ a°¡ }6~ 0_
´1
O ~G~ ?£aN_¹ | b ~ acZ
\a" ~¥} b | T_ ~o|4 e |
O_3a-
ja -d ~ a"9Za¹O_3a"
94dO_3 ~ _a" ~ a¢¡ }6~
¬ O ~k=~
~F~ -d ~ _+a |
Oac- ~ -
O-_c_c4
$a |z| ~ eGa"_ |4 a¢¡ }6~
b | const
_ } b ~F~ b"Z9 ~ a |
gb -d ~ __cd e ~| b
¤ ~ 9 D~ Z_ | Zb"4d ~ a"9Za
const
const
¥H-
j¡H_ca"d9Za" |
9_G(_c } ¡ | b ~ eF ~
OeG¡ob ~ -_ |
9_G | de0-
O
| a4
| b ~ a" ~ _ ~+ ZeGa"_F ~GD~
¡ | d |
ae0Zb ~ Z | dia=a" ~f} b | T_ ~ ~ eZ
9_c | a" ~ b _ ~
´ _]
| afNb ~F~ b ~
Oe ~ a¢¡ }6~ 6a" ~
ac ~ d ~ _3a" |
~ ac ~ b
HZµ ~ _]HO ºg~ b ~
Oe ~
const
b | 9-_TdO_cd9-£¡\
| aT_cdOe eF ~ ZbH-
O_ =~ b0 a" |
~~/· e ~G} a" |
?¬
b ~ a"dib"
a°¡ }6~ _ |4
dO
OeGa" |
O_+a"9Za+ |
| avb ~ a"dib"
½b ~G~ b ~
Oe ~ _G¦a" ~ const µ ~ ¡ =| bcEb ~ -¡HZµ ~ _v
| O ºg~ b ~
Oe ~
-
O_c | dOoa" ~ b ~F| b ~ ~f| Taca ~ ?
´1
Eac ~ _"Z ~ _ } b"aF§a" ~
µ ¡
bc _a¢¡ } eF-¡ | Taca ~ | b | b"H- dO
OeGa" |
} U®
const ~ =|
b- ~ a ~ b"_
a"9ZavZb ~
| ab ~G~ b ~
Oe ~ _Gk´1
za"O__ca"d9Zac |
?
_h!I2D#vb ~ 9dO
O9-
aFSa" | d94?¬
const
| b"HZ } Zb"- ~ a ~ b+_ |4 e |
9_ra3®1a¢¡ }S~ =~k} b | T_ ~
| a+a | dO_ ~ a" ~N| b"H- } Zb- ~ a ~ bZ_h
| O ¯ Z9 ~ | eF- Ub"Z9 ~ Vdiaa"O_ } b | T_ ~ _
~ a" ~ b
~ e ~ _c_"Zbc¡Ea |z} b ~GD~
aN-eFeF ~
a-
| O ¯ e0Ua" |
|4 a" ~ e0- } Zb- ~ a ~ bv±1e0-? ¡ -d ~ -b ~ -i¡{aUµ ~ _e0Zb ~+|4 a"O_ ³ 9
| b | ~ _
£a
« d ~
Oe ~ a" ~]| dOac_c ~ ~ 9 | b |4 a" ~] d9
OeGac |
{
¥-
j¡ F¡D´1
-eGa0i ¡ | d b"a ~
dO
9e/a" |
O_
| bH<ObZbc¡y±1_ ~G~ ~ eGa" |
(² D³ ¡ | d ~ aca ~ bkb ~F b-
b | _cdOeye |
9_ra3®1a¢¡ }S~ dO_"- ~ -_N£a
dO
O
~ e ~ _c_"Ub"¡¹b ~ _3acbceGa"_8¡ | d?¬ ¡ | d{Za ~ b ~ eG ~ a | eB9-
O ~ a" ~ dO
OeGa" |
H ~G¯
Oa" |
?D¡ | d¥Ub ~
e | TTa3a ~ ¹a | a" ~ e |
O_3a3®*a°¡ }6~
} Zb- ~ a ~ b
± ~GD~
o a"O_a"dib"
O_ | dia8a | ~ } b-eGa"e0- ³ -d9
O ~ _c_
¡ | d-_ | e9-
O ~ ac ~ ~ - ~ b ¯ ~ acUae |
a-
9_ a" ~f dO
9e/a" |
~ eFZbZa" |
K
¼
_ | 9
| a- Zb"Z9 ~ _=a"9Za
e | dO{ ~ ~ eFUb ~
} b | bZÀZb ~ a¢¡ } e0-¡H |
~
const
_ | _c } ¡ ~ e0-dO_ ~ £a¹HUµ ~ _H± | bN }9}S~ Zb"_a | HUµ ~ ³
| O ºS~ b ~
Oe ~
a" ~ e |
a ~B· a |4 a" ~
~ eFUbZa" |
?¼_ -
~/· Z } ~ e |
9_3 ~ b
~ h
b | b"- (¬Ia'1) }S| _c_c9 ~ a | ~ eFZb ~ a" ~
Zb"Z9 ~ t -_¦ ~
O |4 e |
O_3a3®1a¢¡ }6~ const rational D9dOa¦a | ~ _3
a¦HZµ ~ fO ºg~ b ~
Oe ~ j_c
Oe ~
a"O_ Zb"Z9 ~]| eFeFdib"_ |
Oe ~f|
O¡{ a ~ b Zb"O_FO-
O¥a"O_ | eFeFdib ~
Oe ~ _ °dO_3aa"ib ~F~
~ _ ~ |m
| b e |
OeGb ~ a ~
~ _c_F( ~ a8dO_8_3ac } d9Za ~ a"9Za Ub"Z9 ~ a"9Za8_V ~ -
jaa | 9 D~ e |
O_3a-
ja -d ~
_c | dO¥ ~G¯
Oa ~ ¡H ~ ae |
O_3a3®1a¢¡ }6~ a"__ce |}S~ _ } -
O_ | b ~ a"9-
½²
~ _ |4 e | ~
(1]I
(¦
4.2.10 Goals
¼=a=a"O_ }6|
ja0 ¡ | d_3 | dO<FF
Dispositional.
² ³ dO
9 ~ bc_3a-
O¥a" ~ -Z_ e |
Oe ~G} a ~ 9
9ob ~F~ b ~
Oe ~ a¢¡ }6~ _-
O¥ac ~ ~G~ b ~
Oe ~ ]
dO ~
~ ¸
-
aceF_ | b
4³ dO
9 ~ bc_3a-
Oka" ~ O ºS~ b ~
Oe ~ ~ a =~F~
<.BAj>*>§l07HP Aj>q:§,f-
O<.BAj>*>§l07TCG,1L-,FCG,F!I.G,h_ ~ H
d9
OeGac |
} Zb- ~ a ~ b"_F¸
³ dO
9 ~ bc_3a-
Oe |
O_3ar®1a¢¡ }6~ _
-
O{ac ~ |
O_3a ]d9 ~
~
´1
} Zbca"eFdOZb0j¡ | d_c | d9{ ~ Z9 ~ a | G0
Operational.
± ² ³ _raZa ~=~/· -eGa } b ~ ®¢-
O }S| _3a"e |
OOa" |
O_ | b dO
OeGa" |
O_¦
D
|
O | b"H- } ZbZ ~ a ~ bIa¢¡ }S~ _
b
b
"
a
i
d
"
b
{
°
a
¡
_
b
b
O
e
O
b
e
O
3
_
3
a
*
®
°
a
¡
¸
|
~
}6~ |4 ~F~ ~ ~
|
|
}6~
± 4³ b"a ~] dO
OeGa" |
O_ a"9Za | O ¡±*_ | ~]|4 ³ a" ~ be0- } Z"b - ~ a ~ cb _F¸
± ³ ¯
Oo_3¡(
ja-eGa"e0-6-
Oo_ ~ H-
ja"e0Z ~ bcb | b"_
} b | b"-T_Va"9ZaZb ~ O
d ~ a | } b | }6~ bV9-
(®
O
O |4 b ~G~ b ~
Oe ~ a¢¡ }6~ _F¸
±
³ ¯
Oo_3¡(
ja-eGa"e0-6-
Oo_ ~ H-
ja"e0Z ~ bcb | b"_
} b | b"-T_Va"9ZaZb ~ Od ~ a | } b |}6~ bV9-
(®
O
O |4 e |
O_3ar®1a¢¡ }6~ _F¸
± 4³ ¯ O
a" ~ ~ eFZbZa" | 9
_
<T4 D~
} b | b-
a | "a ~ |
O_3a fdO ~
~
| _ ~ °a ¡ 6
} ~ _]_c | dO ~ e |
9_ra3®¢-eGe | b"O
O
4.2.11 Exercises
:g'*> MpAD! 2(l
-,G.0#H.G2ZMO,t=> ,
LGCF24W
CF2GRCGADW AD!ME'*!?#c,rRCGAj#c,'*#
Exercise 99 rational.o
'*!?#c2{#&%S,>w'°l0CGADC07
#&%gAj#7924:½%gADP(,T.GCF,/Aj#c,BM'*! VX9,FCF.F'*)-, Y 24W¹J?'*>@,#&%S,WzAD'*!
libmath.a
J?CF2GRCGADW
CF2GRCGADW {:S)G'Q!SR#&%('*)¹>q'rl0C/ADC079Y
Exercise 100
]24!?)G'°MO,FCN#&%S,L-2D>Q>@24;='*!SRfLUADW¥'1>q7½2"L=LG:!I.0#1'324!?) T foo (S i)
{
return ++ i;
}
; '1#&% lF,F'Q!SR24!I,H2"L#&%S,k#17mJ6,0)
=
5
AD!M
5]AD!M lF,F'Q!SR24!I,o2"L#&%S,
int int&
const int&
#17mJ6,0)
5
5
AD!M
Y V%('*)TMO,*t !I,0) MD'h,FCG,F!?#LG:!I.0#1'324!?) Y
int const int int&
const int& A
V'Q!Mz#&%S,.G24Wzl0'*!Aj#1'r24!?)¥2"L A !M LZ24CN;%('3.0%#&%S,TCG,0)G:S>w#1'*!SRLG:g!I.F#1'324!
D
'*))/7!?#3AO.0#1'r./Aj>Q>w7zP Aj>q'rMD5
AD!M,XmJK> AD'Q!\7924:gCHAD!?)G;],FCY
l
fW<24!SR#&%S,.G24Wzl0'*!Aj#1'r24!?)+L-24:!M'Q!`A
MO,1t !6'*#1'324!
5Vt !M½#&%S,.G24Wzl0'*!Aj#1'r24!?)<2"L AD!M L-24C
; %('3.F%T#&%S,fCG,0)G:S>w#1'*!SR=L/:g!I.0#1'r24!½MO,1t !6'1#1'r24!z'*)vAj>w)-2)-,FWzAD!?#1'3./Aj>Q>w7¹P Aj>q'rMD5IW<,BAD!6'*!SR¹#&%gAj#
L/:g!I.0#1'r24!y.BAj>*>w)NAj>w;AD7)h%gADP(,h;],0>*>wsBMO,1t !I,BMP Aj>q:§,NAD!M, h,/.0# ],BXmJK>AD'*!E724:CHAD!?)/;f,GCY
.
I24C$Aj>*>+./24Wl0'Q!Aj#1'324!?)L-24:g!M'*!
)rJS24!MD'*!SRvLG:g!I.F#1'324!
foo
Y
l 5R4'QP(,oJ?CG,G.F'*)-,{J62D)G#c.G24!MD'1#1'r24!?)LZ24Cz#&%S,./24C0CF,0s
± ² ³ ± ³ ± Exercise 101
| b ~B· - } ~
[C0'*#c,{A+LG:g!I.F#1'324!\#&%gAj#)G;A0JK)#&%S,¹P Aj>q:§,0)H2"L#1;f2
int
s°P ADC0'rAilm> ,0)ZY
³
± 4³
int a = 5;
int b = 6;
// here comes your function call
std :: cout < < a < < "\n" ; // outputs 6
std :: cout < < b < < "\n" ; // outputs 5
[\,E;AD!?#¥#c2^%gADP(,yALG:!I.0#1'324!¾#&%gAj#<
| b"HZ ~ _EA^CGAj#1'r24!Aj>!6:gWzlF,FC05'°Y1,-Y
Exercise 102
#1CGAD!?)*LZ24C0W)h'1#='*!?#c2{#&%S,:g!6' F:§,hCF,3J?CG,0)-,F!?#3Aj#1'r24!\'*!E;%('3.0%!6:gW,FCGAj#c24C{AD!MzMO,F!I24W{'*!Aj#c24C
ADCF,¹CF,0>Aj#1'*P(,0>q7HJ?C0'*W<,G5
AD!M#&%S,{MO,G!I24W¥'*!Aj#c24C¹'1)J62D)G'*#1'*P(,-Y I24C¥,BXiADW¹JK> ,F5
21
−14
'1)!I24C0WAj>q' j,/M#c2
−3
.
2
%S,FCF,{ADCG,N#1;]2!Aj#1:gC/Aj>P(,FCm)G'r24!?)o2"L#&%('1)=LG:!I.0#1'324!
// POST : r is normalized
void normalize ( rational & r );
// POST : return value is the normalization of r
rational normalize ( const rational & r );
"W¹JK> ,FW,F!?#+24!I,¥2"L#&%S,GW¥5]AD!M<ADC3R4:»,k;%(77924:%gADP ,{.0%S2D)Z,F! '*#v24P(,FCN#&%S,¥2D#&%S,FC{24!I,-Y
7924:$WAD7;AD!?#]#c2:S)-,k#&%S,
LG:!I.0#1'324!
L/CF24W I,G.0#1'r24! Y 5=W<2-MD'ut,/ML-24CfJSADCGADW¥s
Hint:
gcd
,0#c,FCm)o2"L#17UJ6,
%S24;MO2,F)¹#&%('*)W2-MD' t.BAj#1'324!\> 22D{>w'* , Y
± 4³ ± 4³
int CF24P-'rMO,{AMO,1t !6'1#1'r24!^2"L#&%S,L-2D>*> 24;='*!SRvLG:!I.0#1'324!Y
Exercise 103 // POST : return value indicates whether the linear equation
//
a * x + b = 0 has a real solution x ; if true is
//
returned , the value s satisfies a * s + b = 0
bool solve ( double a , double b , double & s );
,0)G#7924:gCL/:g!I.0#1'r24!
'Q!AkJ?CG2GR4CGADWL-24CHAj#
>@,BAj)F#
#&%S,fJSAD'*Cm)
(a, b)
L/CF24W
#&%S,k)-,F#
{(2, 1), (0, 2), (0, 0), (3, −4)}.
± 4³
(1]I
(¦
f,/.G24!?)G'°MO,FC#&%S,KL-2D>*> 24;='*!SR=J?CF2GRCGADW)]AD!M+'°MO,F!?#1' L/7#&%S,fMO,/.0> ADC/Aj#1'324!?) 2"L P ADC0'1s
Exercise 104
Ailm> ,0)24CL-24C0WzAj>DJSADC/ADW<,0#c,FCm) 'Q!;%('r.0%N7924:.G24:g> MCF,rJK> AO./,A#17mJ6, l07¹'1#&)./24!?)F#&srP(,GCm)G'324!
Y
const
A
CF2GR4C/ADW A4Ri
, l
.
M
,
CF2GR4C/ADW
CF2GR4C/ADW
CF2GR4C/ADW
CF2GR4C/ADW
A4Ri, A4Ri, A4Ri, A4Ri, ± 4³
V'*!MEAj>*>¦W¥'1)G#3Aj ,0) ' LoAD!67
'Q!^#&%S,]L-2D>Q>@24;='Q!SRTJ?CF2GR4CGADW¥)G5hAD!M , XmJK> AD'Q!;%(7
Exercise 105
#&%S,0)-,ADCF,TW{'1)F#3Aj,0)ZYv>*>KJ?CG2GR4CGADW¥)o)G%gADCF,H#&%S,]L-2D>*> 24;='*!SR#1;]2LG:!I.0#1'324! MO,1t 6
! '*#1'324!?)¥AD!M
24!?>q7MD'h,FCN'Q!\#&%S,F'QC
LG:!I.0#1'324!?)ZY
main
int foo ( int & i ) {
return i += 2;
}
const int & bar ( int & i ) {
return i += 2;
}
A
l
.
int main ()
{
const int i = 5;
int & j = foo ( i );
}
int main ()
{
int i = 5;
const int & j = foo ( i );
}
int main ()
{
int i = 5;
const int & j = bar ( foo ( i ));
}
M
,
int main ()
{
int i = 5;
const int & j = foo ( bar ( i ));
}
int main ()
{
int i = 5;
const int j = bar (++ i );
}
4.2.12 Challenges
"W¹JK> ,FW<,F!?#]AD!'Q!?#c,rR4C/Aj>I#17UJ6,
;%S2D)-,P Aj>w:»,0)h%gADP(,TAD! ADCl0'1#1CGADC07 l0:S#
Exercise 106
bigint
tX9,BM !6:WlG,FC 2"L<MD'@R4'1#&)/5LZ24C$,BXOADW¹JK> ,
CF,/./Aj>Q>#&%gAj#
P Aj>w:»,0)%gADP(,
l0'*!ADC07
1, 000 int
32
MD'QR'1#&)¥24! WAD!67HJK>Aj# L-24C0W) Y %S,H#17UJS,{)G%S24:S>M%gADP(,T#&%S,2FJ6,GCGAj#c24Cm) 5 5 5 5
Aj>@24!SR
+ - * / %
;='1#&%#&%S,F'*C¥Aj)G)G'QR4!6W,F!?#P(,GCm)G'324!?)G5
AD!MAD! 24:S#J?:g#f2FJS,FCGAj#c24CY
[<C0'1#c,hAJ?CF2GR4C/ADW #c2¹#c,F)F#¦7924:gC!6:WlG,FC+#17mJ6,-Y I24Ch,BXOADWJK>@,G5R'*P(,F!
AD!M 5I'1#)F%S24:S>M
a
b
Aj>q;]AD7)%S2D> M#&%gAj#
Y
a = (a / b) * b + a % b
)-,#&%S,
#17UJ6,
#c2 t !Aj>*>q7HAD!?)/;f,GCAj>*>9#&%S,
!A4RR4'Q!S
R 0:§,F)F#1'324!?)
#&%gAj#I%gADP ,%gAD:g!?#c,BM
bigint
7924:+L-24C])Z2>@24!SR ;%gAj#'*)
#&%S,]#1;],F!?#1'3,F#&%J624;],FC2"L [%gAj#I'1)
5#&%S,It6LG#1'3,0#&
% V'°lF24!AO./.F'
3
F50
!6:gWzlF,FC05f,0#c.-Y
© Copyright 2026 Paperzz