[PDF]

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~ b€Za | b |mD~ b"‚ | -ƒO„†…O‡\./AD!ˆ%S,0>‰Jy'Q!ˆWzAjŠ-'*!SR‹!I,F;n#17UJ6,F)‹,BAj)G7ŒAD!Mz'Q!?#1:g'1#1'QP(,o#c2
:g)-,-Y
 d 9
} }S| _ ~Ž=~Ž -…jafa | dO_ ~ CGAj#1'324!Aj>8!6:W‘lF,GCm)o„’…“ } b | ‡b€-”–•S„1— ~ —’•?…d9”˜ ~ bc_ |4™ a"š ~™›| b"”
• š b ˜ acšza"š ~ …d9” ~ b€Za | b
-…Oƒ‘a"š ~ ƒ ~ … | ”T„†…9Za | b
Ub „†…a ~ ‡ ~ b"_F—œžfžŸƒ | ~ _]… | a
n/d Ž ~ ~ |
n
d ~
š9 D~  ™ d9…Oƒ9-” ~ …ja€-‚ga¢¡ }6~+™›| bb€Za"„ | …Z‚6… dO”˜ ~ b"_F•i_ |Ž=~ š9 D~ a | „†” } ‚ ~ ” ~ …a8„£a | dib"_ ~ ‚ D~ _F—
¤ ~ e | dO‚†ƒ |4™ e | dib"_ ~ b ~/} b ~ _ ~ …ja¥b€Za"„ | …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_NƒO„†_3a"„†…OeGa
”HZa"š ~ ”HUa"„†e0-‚§e | …Oe ~G} a0—‹¨=š ~ a Ž=| …d9”˜ ~ bc_
-…Oƒ
˜ ‚ …O‡¥a | ‡ ~ a"š ~ bcªi•-…Oƒ$acš9„’_„†_h-‚’_ |
n
d © ~ |
b ~G«9~ e/a ~ ƒ<„’…‘”HZacš ~ ”HZa"„†e0Z‚K… | a€Ua"„ | …?¬acš ~ _3¡ ”˜ | ‚I­ ™›| b]a"š ~ _ ~ a |4™ b€Za"„ | …Z‚… dO”˜ ~ b"_„†…OƒO„£®
e0Za ~ _
a"š9Za Ž=~ Zb ~ ƒ ~ Z‚†„†…O‡ Ž „£a"šzk”HZa"š ~ ”HZac„†e0-‚Sa¢¡ }S~ •6ƒ ~G¯ … ~ ƒz˜¡–„’a"_  -‚†d ~ b€Z…9‡ ~ AD!M‘„’ac_
™ dO…OeGa"„ | …9-‚†„£a°¡z±1_ ~F~  ~ eGa"„ | … —†²— D³ —
´1ƒ ~ Z‚†‚’¡D• Ž=~Ž=| dO‚†ƒ–‚’„’µ ~ a | ‡ ~ afTœžfž¶a¢¡ }6~ a"š9Za
e0-…‹˜ ~
dO_ ~ ƒz‚†„’µ ~~B· „†_3ac„†…O‡TZb"„’acš9” ~ a"„†ea¢¡ }6~ _G¸Sa"š ~™›| ‚†‚ |mŽ „†…O‡ } „ ~ e ~h|4™ e | ƒ ~ ± ™›| bf-ƒOƒ9„’…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"š ~ ƒ ~ _c„’b ~ ƒ } „ ~
Á
bHƒ ~G¯ …O„†…O‡“… ~GŽ a¢¡ }6~ _N˜-_ ~ ƒ | … ~/· „’_3a"„†…O‡“a¢¡ }6~ _F—´1…yacš9„’_
a |4™ )F#1C0:».0#&)F—¼^_3a3b"dOeGa8„†_dO_ ~ ƒTa | -‡4‡b ~ ‡DZa ~ _ ~GD~ b€Z‚  Z‚†d ~ _
~|4™ <… ~GŽ a°¡ }6~ —^¤y„’acš\a"šO„†_F• Ž=~ e0-… ~ Z_c„†‚’¡Œ” | ƒ ~ ‚=a"š ~
a°¡ }6~ „†…‘œžfžh—+¿ ~ b ~ „†_] Ž=| bcµ(„’…9‡ } b | ‡b"-”Àa"š9Za]”HZµ ~ _
e ~f|4™ e | ƒ ~ Z˜ |mD~ —
Ã
// Program : userational. C
// Add two rational numbers .
# include < iostream >
Æ
// the new type rational
struct rational {
Â
ÄÅ
\KI8I
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…pœžvžh•8–_3a3b"dOeGaƒ ~/¯ … ~ _–… ~GŽ a¢¡ }S~oŽ š | _ ~N -‚’d ~ b€Z…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 ~ b€Z…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‡
™›|
~
|
|
|4™9
~

~
|
~
!"$#&%(')+*"*"),".-
/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 | …9ƒO„’ac„ | …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€-…Oƒ9Zb"ƒO„ ~ ƒK•--…Oƒ | dib Ž F¡ |4™ Ž b"„£a"„†…O‡ a"š ~ ”
†„ _ | … ~f}6| _3_c„’˜9‚ ~ 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„†…O‡i—¨=š ~ ƒ ~G¯ …O„’a"„ | …
~ a _V‡ ~ a8b"„†ƒ |4™6| … ~}6| _c_c„’˜9‚ ~ e | … ™ dO_c„ | …Nb"„’‡4ša ™ b | ”¾a"š ~
struct rational {
int n ;
int d ; // INV : d != 0
};
ƒ ” „†ƒOƒO‚ ~ ‚†„’…
| ~ _!I2D#ƒ ~G¯ … ~¹ Zb"„›U˜‚ ~ _ n -…Oƒ d |4™ a¢¡ }6~ int •»-‚’a"š | dO‡4š‘a"š ~ a Ž=| T
 Zb"„›Z˜9‚ ~ ƒ ~ eG‚›Zb€Zac„ | …O_-_ Ž=~ µ(… |UŽ acš ~ ”–—Za"š ~ b0•?-‚’‚ ™›| dibv‚’„†… ~ _
a | ‡ ~ "a š ~ bfƒ ~G¯ …
a"š ~ …9-” ~
• ˜9diaZa8acšUa }6| „†…ja0•… ~ „£a"š ~ b  Zb"„›Z˜9‚ ~|4™ ac
š Ua … ~GŽ a¢¡ }S~ •(…
rational
|4™ a¢¡ }6~ int š9 D~ ˜ ~F~ …–ƒ ~G¯ … ~ ƒ?—V¨=š ~ a Ž=| ”T„’ƒ9ƒO‚ ~ ‚†„†… ~ _
int n ;
int d ; // INV : d != 0
_ ‚ || µ‹‚†„’µ ~
~ v
~ ‹#17mJ6, |4™
| b  Ub"„›Z˜9‚ ~ _
_6
} ~ eF„ ™ ¡kacšUa -…j¡T-eGacdZ‚2(l
-,G.0# |4™ a"š ~ … ~GŽ a¢¡ }6~ ±*„1— ~ —Z…¡Ne | …9e/b ~ a ~ b€Ua"„ | …9-‚O… dO”˜ ~ b ³ © š9-_cª
±1„†_b ~G} b ~ _ ~ …ja ~ ƒ˜ ¡ ³ a Ž=|]| ˜ ~ e/a"_ |4™ a¢¡ }6~
a"š9ZaIeF-…˜ ~ ZeFe ~ _c_ ~ ƒka"šib | dO‡4šha"š ~ …Z” ~ _ -…Oƒ
int
n
¸O_ ~F~ a"š ~ ” ~ ”˜ ~ b=-e ~ _c_˜ ~ ‚ |mŽ —¦¨šO„†_=_ }S~ eF„ ¯ e0Zac„ | …H„†_=„†” }6| bca€Z…a8„ ™KŽ=~Ž -…jaa | „†” } ‚ ~ ” ~ …a
d
|}6~ b"Za"„ | …O_ | … | dib… ~GŽ a¢¡ }6~ ‚†„£µ ~ „’…{a"š ~f™ d9…OeGac„ | … add —
¿ ~ b ~ „†_VZ…H-…9-‚ | ‡¡ ™›| bVacš ~ _c„’a"d9Zac„ | …?—I´ ™ a"š ~ dO…O„ D~ bc_c„’a¢¡¹-ƒO”T„†…O„†_3acb€Ua"„ | … Ž -…ja"_a | _ }6~ eF„ ™ ¡
š |UŽ +_3a"dOƒ ~ …a„†_b ~G} b ~ _ ~ …a ~ ƒ{„†…Ha"š ~ „’b ¯ ‚ ~ _G• a"š ~ ¡T”T„†‡4šjaVe | ” ~ d }{Ž „’a"šTa"šib ~F~
} „ ~ e ~ _ |4™ ƒ9Za"
a"š9Za¹Zb ~ … ~ e ~ _c_cZbc¡S¬¥z…9-” ~ •V-…Œ„†ƒ ~ …ac„ ¯ e0Za"„ | …$…d9”˜ ~ bF•8-…Oƒ\ } b | ‡b€-” |4™ _ra"dOƒO¡D—Œ¨=š9„’_
ƒ ~G¯ … ~ _Va"š ~ a¢¡ }S~ ª |4™ +_3acd9ƒ ~ …ja -…Oƒo-‚†‚ |UŽ _ ™ dO…OeGa"„ | …Z‚†„’a¢¡o±*b ~ ‡4„†_racb€Za"„ | …K•4e€š9-…O‡ ~
|4™S} b | ‡b€Z”
©
|4™ _ra"dOƒO¡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"-‚1•O_3acb"dOeGaƒ ~G¯ …9„£a"„ | …o‚ | | µ _Z_ ™›| †‚ ‚ U| Ž _F—
struct
. ¸
F
¸
—’—£—
IB ¸
¸
\KI8I
¿ ~ b ~ • „†_+a"š ~ …9-” ~k|4™ a"š ~ … ~/Ž ‚’¡‘„†…a3b | ƒOdOe ~ ƒ$_3acbcd9e/aT±*a"šO„†_…9-” ~ ”¹dO_3av˜ ~ -…$„†ƒ ~ …ja"„ ¯9~ b0•
 ~ eGac„ | … —†²— D³ •O-…Oƒ F •’—F—G—0• I Ub ~ …9-” ~ _ |4™~B· „†_3ac„†…O‡a¢¡ }S~ _F— ¨=š ~ _ ~ Ub ~ e0Z‚†‚ ~ ƒoa"š ~ :g!MO,GCms
>q7'Q!SRz#17UJ6,F) |4™ —6¨=š ~ „†ƒ ~ …a"„ ¯~ b"_ . • •’—B—F—0• / Zb ~ Zb ~ a"š ~ MiAj#3A‘W‘,FW‘lG,FCm)
|4™ acš ~ … ~GŽ a¢¡ }6~ —
¨š ~‹ Z‚†d ~ b€-…O‡ ~‹|4™ „†_ I —8¨šO„†_H” ~ -…O_F•  Z‚†d ~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” ~ …a€Z‚a¢¡ }6~ _F•K˜dia-‚†_ | d9_ ~ b3®&ƒ ~G¯ … ~ ƒ½a¢¡ }6~ _F— | b ~/· ®
}6~
~k™
© ·
-” } ‚ ~ •De | …O_c„’ƒ ~ bVa"š ~D~ eGa | b _ } -e ~ ­ 3 |UD~ b a"š ~¯9~ ‚†ƒo­—
f„ D~ …Na"š ~ a¢¡ }6~
-_8Z˜ |UD~ •
rational
e
O
d
†
‚
ƒ
”
ƒ
6
‚
­

_
’
‚
‚
F
_
—
Ž=~ |
| ~
™›| |UŽ
3
struct rational_vector_3 {
rational x;
rational y;
rational z;
};
¼
‚’a"š | dO‡4𥄣a ›™ | ‚†‚ |UŽ _ ™ b
… ~F~ ƒ‘… | a˜ ~ a"š ~ "_ -” ~ —]¿
•
e0-…‡ ~
unsigned int Ž=~
” a"š ~ ƒ ~G¯ O
… „’a"„ |
| b~ ~ „†_]-… ~/· Z ” }
a  Zbc„›-…a |4™ acš
…K• ‚ ~ ad9_”HZµ ~ „’a ~/·(} ‚†„†eG„’a0¬a"š ~ a¢¡ }S~ _ F •’—F—G—0• 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"š ~ b€Za"„ | …Z‚»e0Z_ ~ •
Ž=~ ’„ …a ~ b } b ~ a  -‚†d ~ _ƒO„ ºS~ b ~ …a"‚£¡S¬  Z‚†d ~ (u, n) © ” ~ Z…9_3ª u „ ™ n = -…Oƒ −u „ ™ n = —
…<„ ™ a Ž=| _3acb"dOeGa]ƒ ~G¯ …O„’a"„ | …O_𐠁D~ a"š ~ _"-” ~ W<,FWzlF,FC{)rJ6,/.F' t.BAj#1'324!±*a"š ~} Zbca |4™ a"š ~
D~
ƒ ~G¯ …O„’a"„ | … ~ …OeF‚ | _ ~ ƒ$„†…½eGdObc‚’¡<˜Ob€-e ~ _ ³ •§acš ~ ¡“ƒ ~G¯ … ~ MD'h,FCG,F!?#ha°¡ }6~ _F•Z…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¯ … ~ ƒ |UD~ b-… ~ ” } a¢¡H_ ~ a |4™~B· „†_3ac„†…O‡a¢¡ }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_c„’˜9‚ ~ a | d9_ ~ Zbcb€F¡T” ~ ”˜ ~ bc_V„†…H_3acbcd9e/a"_F— | b ~B· -” } ‚ ~ •Da"š ~¯9~ ‚†ƒ{­
š9 D~ ƒO„†eFdO_c_ ~ ƒ–Z˜ |mD~ e | 9
d ‚’ƒ–-‚’a ~ b"…9Za"„ D~ ‚£¡k˜ ~ ” | ƒ ~ ‚ ~ ƒH‚†„£µ ~ "a šO„†_G—
3
acšUa Ž=~
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€-” „†… Ž š9„’eBšz„’aeF-…‘˜ ~ dO_ ~ ƒ ±1„†…z  Zb"„›U˜‚ ~
ƒ ~ eF‚›Ub€Za"„ | …?• | b¦Z_ ™›| bc”H-‚ ™ dO…OeGa"„ | … } Zb€-” ~ a ~ b a¢¡ }6~ • ™›| b ~/· -” } ‚ ~ ³ —  acb"dOeGac_¦˜ ~ 𐠁D~ _c„†”T„’‚›Zb
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ƒ ~ eF‚›Ub€Za"„ | …oš9-_=a"š ~+™›| b"”
struct
¨ š ~ _3acb"dOeGa§ƒ ~/¯ …O„’ac„ | …+„†_§ƒ ~ eF‚†Zb€Za"„ | …-_ Ž=~ ‚†‚1•--…Oƒhd9_3dZ‚†‚’¡ | … ~ -eGacdZ‚†‚’¡]… ~F~ ƒO_§a"š ~ ƒ ~/¯ …O„’ac„ | …
=
„†… | b"ƒ ~ b»a | dO_ ~  _3acb"dOeGa0—¨šO„†_?„†_ ~ -_r¡fa |~/· } ‚›-„†…?¬6„†… | b"ƒ ~ b»a | acb"-…O_c‚›Za ~   Zb"„›Z˜9‚ ~ ƒ ~ eG‚›Zb€Zac„ | …
|4™ _3acbcd9e/aa¢¡ }6~ • | b ™ dO…OeGa"„ | … Ž „’a"š ™›| b"”HZ‚ } Zb€Z” ~ a ~ b"_ |4™ _3acbcd9e/aa¢¡ }6~ „’…a | ”HZeBšO„†… ~ ‚›-…O‡4d9-‡ ~ •
a"š ~ e | ” } „’‚ ~ b=… ~F~ ƒO_a | µ(… |UŽ a"š ~ -” | dO…a |4™ ” ~ ” | bc¡Tb ~ dO„’b ~ ƒ˜ ¡¥-… | ˜ ~ e/a |4™ acš ~ _3acb"dOeGaF—
Vdia
a"šO„†_„†… ™›| b"”HZa"„ | …o„†_ | …9‚£¡ | ˜Oa€-„’…U˜‚ ~v™ b | ”a"š ~ ƒ ~G¯ …O„’a"„ | … |4™ acš ~ _3acb"dOeGa0¸S-_‚ | …O‡TZ_a"š ~
e | ” } „†‚ ~ bš9-_ | …O‚’¡k_ ~F~ …ovƒ ~ eF‚†Zb€Za"„ | … |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 ~ acšZ…ka"š ~ œ=Zbca ~ _c„›-… } b | ƒOdOeGa |4™ „’a"_¦d9…Oƒ ~ b"‚£¡(„†…O‡]a°¡ }6~ _ˆ„£a |ºg~ b"_V_ | ” ~ ˜-_c„’e
™ dO…OeGa"„ | …9-‚†„£a°¡ | …^„’ac_ |mŽ … a"š9Za Ž=~‹~/·(} ‚›Z„†…ˆ… ~/· a0— ¨=š ~ ” | _3aH„’” }6| bca€-…ja±&Z…9ƒˆ-‚†_ | ” | _3a
 „’_c„’˜9‚ ~ ³ ™ 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_ . •’—B—0—F• / 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<,GW‘lF,GCHAO./.G,0)G)N2FJ6,FCGAj#c24C{±1_ ~F~ ¨Z˜9‚ ~
.
¨=š ~ e | ” }6| _c„£a ~=~/·(} b ~ _3_c„ | … „’_V-…T‚  -‚’d ~
.
a"š9Za=a"š ~ ƒUa€” ~ ”˜ ~ b „†_AO./.G,0)G)-,/MLZ24C K„’… ~ _ -…Oƒ |4™ b | ‡b€-” oZ_c_c„†‡4…  -‚†d ~ _a |
” ~ ”˜ ~ b-eFe ~ _3_ |}S~ b€Za | bF• Ž šO„†‚ ~ ‚†„†… ~ ~ ” } ‚ | ¡(_§acš ~ ”
—
„†…Na"š ~ ¼ O
} }6~ …9ƒO„ ·¹™›| b £„ a"_V_ }S~ Fe „ ¯ Fe _ ³ —
??
„ ™ „£"a _ ~ ‚ ™ †„ _8Z…T‚  Z‚†d ~ • Z…9ƒ Ž=~ "_ F¡
a"š ~ "b Za"„ | …9-‚K… dO”˜ ~ b"_
a"šib | dO‡4š–a"š ~
r
b -eFe ~ _c_ |}6~ b€Ua | ba ]
~ ”˜ ~ I
| | dia } diaa"š ~
i²
\KI8I
d a } dia |4™ 9„’…9ƒO„†eFZa ~ _ a"š9Za Ž=~ „’…a ~ b } b ~ a
 -‚†d v
~ |4™ "a š ~ €b Ua"„ | …9-‚6… dO”˜ ~ b t —8¨=š ~ -ƒOƒO„’a"„ | …Z‚ | i
/
a"š ~ 1® a"d } ‚ ~
-_acš ~ d | "a „ ~ …a
—
(n, d)
n/d
4.1.4 Initialization and assignment
¤ ~ e0-…‹„†…O„’a"„†-‚†„ ~| ˜ ~ eGac_ |4™ _3acbcd9e/aa¢¡ }6~ -…Oƒ‹-_c_c„’‡4…  Z‚†d ~ _a | a"š ~ ”–• rdO_3a‚†„’µ ~]Ž=~ ƒ | „’a ™›| b
™ dO…OƒZ” ~ …a€Z‚Sa°¡ }6~ _F—
´1…‚†„†… ~ |4™ b | ‡b€-” ™›| b ~B· -” } ‚ ~ •0a"š ~I Zb"„›Z˜9‚ ~ |4™ a¢¡ }S~
„’_K„’…9„£a"„›-‚†„ ~ ƒ Ž „£a"š
t
rational
a"š ~ -‚†d ~|4™ a"š ~~B·(} b ~ _c_3„ | …
—´1…H]_3acb"dOeGa0•j„†…O„’a"„†-‚†„0Ua"„ | …„†_ dO„’a ~ …9Za"dib€-‚’‚’¡hƒ | … ~
add (r, s)
” ~ ”˜ ~ b3® Ž „†_ ~ •§„1— ~ — ™›| b ~ -e€š ƒ9Za€” ~ ”˜ ~ b_ ~G} Zb"Za ~ ‚’¡D—…Oƒ ~ bha"š ~ š | | ƒK•acš ~ ƒ ~ eG‚›Zb€Zac„ | …
_3a€Ua ~ ” ~ …ja
rational t = add (r , s );
a"š ~ b ~G™›| b ~ š9-_oa"š
³ Z…9ƒ
add (r, s)
Zbcb"0¡ ” ~ ”˜ ~ b"_F—
-_c_3„†‡4…O” ~ …a]˜ ¡ Ž
” ~ -…?—
~<~Gºg~ eGa |4™ „†…O„’a"„›-‚’„F„†…O‡ t.n ± Ž „’a"šya"š ~z¯ b"_3a¥e | ” }6| … ~ …ja |4™ a"š ~z -‚†d ~<|4™
± „’acša"š ~ _ ~ e | …Oƒze | ” }6| … ~ …a ³ —
´1…ja ~ b ~ _ra"„†…O‡4‚’¡D•Oa"šO„†_-‚†_ |NŽ=| bcµ(_ Ž „’a"š
t.d Ž
 a3b"dOeGa"_Ta"š ~ b ~F™›| b ~‘} b |m „†ƒ ~  Ž 0¡ |4™ ™ Zµ „†…O‡4ª Zb3b€F¡ „†…O„’a"„›-‚’„0Za"„ | … -…Oƒ
©
b€ }O} „†…O‡oa"š ~ Zbcb€F¡‘„†…a | H_3acb"dOeGaF—N¿ ~ 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š ~ ƒ9Za€T” ~ ”˜ ~ 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 | Zbcb€F¡Ha¢¡ }6~ _ ³ _racb"dOeGaa°¡ }6~ _ µ(… |mŽ ªa"š ~ „’b” ~ ” | bc¡
©
b ~ dO„’b ~ ” ~ …ja"_F— (b | ” a"šO„†_F•ia"š ~ e | ” } „†‚ ~ be0-… ¯ ‡4dib ~v| dOaš |UŽ ”H-…j¡H” ~ ” | bc¡He ~ ‚’‚†_Ub ~ a | ˜ ~
e |} „ ~ ƒ ™›| ba"š ~ „†…O„’a"„›Z‚†„0Zac„ | … |4™ „†…
—
q
point q = p
´1…‘a"š ~ _"-” ~Ž F¡$±1” ~ ”˜ ~ b Ž „†_ ~ „†…O„’a"„›Z‚†„0Zac„ | … ³ •(a"š ~¹™›| bc”H-‚ } Zb€-”HUa ~ b"_
-…Oƒ
a"š ~
a
b |4™
™ dO…OeGa"„ | … add Zb ~ „†…O„’ac„›-‚†„ ~ ƒ ™ b | ” a"š ~k Z‚†d ~ _ |4™ r -…Oƒ s ¸a"š ~k -‚†d ~N|4™ add (r, s) „’ac_ ~ ‚ ™
-‚†_ | b ~ _cdO‚’a"_ ™ b | ” -…o„†…O„’a"„›-‚’„0Za"„ | … |4™ k±Qa ~ ” }6| b€Ubc¡ ³ | ˜ ~ eGa Ž š ~ …Ta"š ~
_3a€Za ~ ” ~ …a |4™
return
a"š ~f™ d9…OeGac„ | …
„†_
eFdia ~ ƒ?—
add ~/·(~
´1…O_3a ~ - ƒ |4™ "a š ~ Z˜ |UD~ ƒ ~ eF‚›Zb€Ua"„ | …f_3a€Za ~ ” ~ …a?a"š9Za»„†…O„’a"„›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"_3a0•9-…Oƒ¥acš9„’_ƒ ~F™ -dO‚’ar®&„†…O„’a"„†-‚†„ ~ _a"š ~ ƒUa€” ~ ”˜ ~ b"_F—´1… | dib
t
e0-_ ~ •Va"š ~ ¡EZb ~{|4™ a°¡ }6~
¸
b d9…Oƒ9-” ~ …ja€-‚Va¢¡ }6~ _F•ƒ ~G™ -dO‚’a3®&„’…9„£a"„›-‚†„ 0Za"„ | …‘ƒ | ~ _… | a"šO„†…O‡i•
int ™›| ™
_ | a"š ~– Z‚†d ~ _ |4™ acš ~ ƒ9Za"“” ~ ”˜ ~ b"_NUb ~ dO…9ƒ ~G¯ … ~ ƒˆ ™ a ~ boƒ ~F™ -dO‚’ar®&„†…O„’a"„†-‚†„0Ua"„ | … ±1_ ~F~ -‚’_ |
 ~ eGac„ | …
—’²— D³ —`´1…ˆa"š ~ … ~/· ao‚†„†… ~ •=a"š ~– Z‚†d ~z|4™
„†_o-_c_c„†‡4… ~ ƒ a |
•
-…Oƒˆacš9„’_
add (r, s)
t
-_c_3„†‡4…O” ~ …a-‡DZ„†…¥š9 }O}6~ …O_” ~ ”˜ ~ b3® Ž „†_ ~ —
| b ~GD~ bc¡ ™ dO…Oƒ9-” ~ …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¢¡D•dO_c„’…9‡acš ~T|}S~ b€Za | bc_
==
!=
…9Za"dib€-‚8a | š9 D~ a"š ~ _ ~ a Ž=|z|}6~ b"Za | b"_-‚’_ |‘™›| b_3a3b"dOeGa"_F•„†” } ‚ ~ ” ~ …ja ~ ƒ“„†…Œ_cdOe€šp Ž 0¡½acšUa
a"š ~ ¡oe | ” } Zb ~ ” ~ ”˜ ~ br® Ž „’_ ~ —
| b"”H-‚†‚’¡D•Da"šO„†_ Ž=| dO‚†ƒH˜ ~ 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"š ~
~ dZ‚†„’a¢¡D• Ž=~<Ž=| dO‚†ƒ ~ b3b | … ~F| dO_c‚’¡ˆe | …OeF‚†dOƒ ~ 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„†… Ž šO„†e€š Ž=~ „†ƒ ~ …ja"„ ™ ¡ } Z„’b"_
a"š9Zaƒ ~/¯ … ~ a"š ~ _"-” ~ b€Za"„ | …9-‚
(n, d)
… dO”˜ ~ b
—
n/d
¨š ~ _"Z” ~ š9 }O}6~ …O_ Ž „’a"š | diba¢¡ }S~
b ” Z˜ |mD~ ¬§_c„’…9e ~ ˜ | a"š } -„’bc_
extended_int ™ |
(0,
)
-…Oƒ
ª{„†…<a"šO„†_
Zb ~ „†…a ~ b } b ~ a ~ ƒ½-_ •»” ~ ”˜ ~ b3® Ž „†_ ~h~ dZ‚†„’a¢¡ Ž=| 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ƒ ™›| bTacš9„’_
b ~ Z_ | …?•¦œžfž … ~ „’acš ~ b } b |U „†ƒ ~ _ ~ d9-‚†„’a¢¡ |}6~ b€Za | b"_ ™›| b_3a3b"dOeGa"_F•I… | b-…j¡ | a"š ~ b |}S~ b€Za"„ | …9_
˜ ~ ¡ | …Oƒza"š ~ ” ~ ”˜ ~ b]-eFe ~ _c_F•?„†…O„’a"„›Z‚†„0Zac„ | …?•O-…Oƒ“-_c_3„†‡4…O” ~ …aƒO„†_3eFdO_c_ ~ ƒ<Z˜ |mD~ — }6~ b€Zac„ | …O_
a"š9Zab ~ _ }6~ e/aha"š ~ _ ~ ”H-…ja"„†e0Z‚  -‚†d ~ b€-…O‡ ~ eF-…½˜ ~N} b |U „†ƒ ~ ƒ½˜ ¡“acš ~ „†” } ‚ ~ ” ~ …ja | b0•6a"š | dO‡4šK•
_ ~F~ … ~/· a_ ~ eGac„ | …?—
| dh”T„†‡4ša§Zb"‡4d ~ a"š9Za ~GD~ …” ~ ”˜ ~ b3® Ž „†_ ~ „†…O„’ac„›-‚†„FZa"„ | …]-…Oƒ-_c_3„†‡4…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_cdOe€šh_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 ~ dO„’b ~ … G~ Ž |}S~ b€Za"„ | …9_G•˜9dia Ž š ~ …o„’a e | ” ~ _8a | a"š ~ …9-”T„†…O‡ 4
| ™ _cdOe€š |}6~ b"Za"„ | O
| … ~ ‚ ~ _c_+…O„†e ~ -_ }6~ eGa 4
| ™ b | ‡b€-” {_3š |mŽ _f„†…“‚’„†… ~ i— ¡zƒ ~G¯ …9„’…9‡Ha"š ~ ™ 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Ž=~GD~ b0• Ž=~
Ž=| O
d ‚†ƒH‚†„’µ ~ a | Zƒ9ƒHb€Zac„ | …9-‚g…d9”˜ ~ bc_ ‚†„’µ ~Ž=~ -ƒOƒo„†…a ~ ‡ ~ b"_ | b «9| Za"„†…O‡-®
… a… dO”˜ ~ b"_F•(˜¡{_3„†” } ’‚ ¡ Ž bc„’a"„†…O‡T±1„†… | dObe0-_ ~ ³
}6| „†j
\KI8I
rational t = r + s ;
¨ š ~ ˜ ~ … ~G¯ a |4™ a"šO„†_=”T„†‡4ša … | a=˜ ~ „†”T” ~ ƒO„›Ua ~ ‚’¡ | ˜  „ | dO_F•i„†… } Zbca"„’eFdO‚›Zb c_ „’…9e ~ "a š ~ …9-”T„†…O‡ |4™
=
a"š ~f™ d9…OGe ac„ | …
_ ”T_=a | ˜ ~ dO’„ a ~ b ~ Z_ | …9Z˜9‚ ~ ¸(9
˜ diae | …O_c„’ƒ ~ b a"š ~f~/·(} b ~ c_ _c„ | …
add ~F~
rational t = subtract ( multiply (p , q ) , multiply (r , s ));
-…Oƒ„’ac_
©
…9ZacdOb"-‚†ªe | dO…a ~ b } Zbca
rational t = p * q - r * s;
a | ‡ ~ a
Z…„†ƒ ~  Ž š9Za Ž=~ ” ~ -…?—
¨š ~ …9ZacdOb"-‚»… | a€Ua"„ | …e0Z…z„’…9ƒ ~F~ ƒ˜ ~ -e€šO„ ~GD~ ƒK¬µ ~ ¡ ™›~ ZacdOb ~|4™ a"š ~ œžvž ‚›-…O‡4d9-‡ ~ „†_
a"š9ZaK” | _3a |4™ „’a"_ |}6~ b"Za | b"_±1_ ~G~ ¨U˜‚ ~
„’…va"š ~ ¼ }O}6~ …OƒO„ ·]™›| bKa"š ~¦™ dO‚†‚4‚’„†_3a ³ e0Z…+˜ ~ 24P(,FCm> 2-AiMO,/M
??
a |Ž=| bcµ ™›| b | a"š ~ b=a¢¡ }6~ _-_ Ž=~ ‚’‚1—¦¨šO„†_ ” ~ Z…9_8acšUa Ž=~ eF-…¥dO_ ~ a"š ~ _"-” ~|}6~ b"Za | b a | µ ~ …oa |
„†” } ‚ ~ ” ~ …a  Zb"„ | d9_ |}6~ b"Za | b"_F¬ Ž=~ |UD~ b"‚ | -ƒOª¹acš ~ a | µ ~ …?—
©
´1… } b"„’…9eG„ } ‚ ~ •Va"šO„†_k„†_N… | a"šO„†…O‡“… ~GŽ ¬ Ž=~ -‚’b ~ -ƒi¡Œµ … |UŽ acšUaNa"š ~ ˜9„†…9Zbc¡ |}6~ b€Za | b
„†_
+
  Z„†‚›Z˜9‚ ~™›| b _ ~GD~ b€-‚ga¢¡ }S~ _F• ™›| b ~B· -” } ‚ ~
-…Oƒ
—¤yš9Za „’_V… ~GŽ „†_Va"š9Za Ž=~ e0-…H-ƒOƒ
int
double
~GD~ …E” | b ~¹|UD~ bc‚ | -ƒO_ | … | dib |UŽ …?•I-…Oƒ½_c„†” } ‚’¡z‚ ~ ava"š ~ e | ” } „†‚ ~ b ¯ ‡4dib ~N| dia ™ b | ” a"š ~ e0-‚†‚
} Zb€-” ~ a ~ b a¢¡ }6~ _ Ž šO„†e€š | … ~ „†_… ~F~ ƒ ~ ƒ–„†…¥e ~ bca€-„†…¥e | …a ~B· a0—
´1… |mD~ b"‚ | Zƒ9„’…9‡E-… |}6~ b€Ua | b0• Ž=~ e0Z…9… | aHe€š9-…O‡ ~ acš ~‹|}6~ b€Za | b u_HZb"„’a¢¡D• } b ~ e ~ ƒ ~ …Oe ~‘| b
-_c_ | eF„›Ua"„  „£a°¡D•Z˜dia Ž=~ e0-…Ne/b ~ Za ~=D~ b"_3„ | …O_ |4™ „’a Ž „’acškZb3˜„£acb€Zbc¡ ™›| b"”H-‚ } Zb€Z” ~ a ~ b¦-…Oƒb ~ a"dib"…
a¢¡ }6~ _F—
}S~ b€Za | b |mD~ b"‚ | Zƒ9„’…9‡h„’_ _c„†” } ‚’¡k_ }6~ eF„†-‚Se0-_ ~f|4™ LG:!I.0#1'324!y24P(,FCm> 2-AiMD'Q!SRD— | b ~/· -” } ‚ ~ •
-…Oƒ
 -„†‚›U˜‚ ~ • Ž=~ e | dO‚†ƒTƒ ~ eF‚›Ub ~ a"š ~
™›| ‚†‚ |UŽ „†…O‡
š9  „†…O‡+a"š ~ _racb"dOeGa"_
rational
extended_int 
a Ž=|{™ dO…OeGa"„ | …9_„’…‘a"š ~ _"-” ~} b | ‡b€Z”–• Ž „£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~
Ž šO„†e€š |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„ | … |mD~ b"‚ | -ƒO„†…O‡T„†…‹‡ ~ … ~ b€-‚I„†_dO_ ~G™ d9‚*•?˜9dia]… | a]…
i
‚ | -ƒO„†…O‡i—`¨ | ƒ ~G¯ … ~ -… |mD~ b"‚ | -ƒ ~ ƒ |}6~ b€Ua | b0• Ž=~ š9 D~
!I2D#3Aj#1'324!?—´1…Ha"šO„†_ … | a€Za"„ | …?•Da"š ~ …Z” ~
|4™ a"š ~f|}S~ b€Za | b8„†_
a | a"š ~} b ~G¯i·
—f´1…‘e0Z_ ~|4™ a"š ~ ˜9„†…9Zbc¡–-ƒOƒ9„£a"„ | …
operator
a"šO„†_=‚ || µ(_-_ ™›| ‚’‚ |UŽ _-…Oƒ{b ~G} ‚›Ze ~ _acš ~f™ dO…OeGa"„ | …
—
add
~ Z b"‚’¡–-_dO_ ~F™ dO‚¦-_ |}6~ b€Ua | b |UD~ b3®
a | dO_ ~ acš ~ L/:g!I.0#1'r24!Aj>N2FJ6,FCGAj#c24C
| ˜9a"-„†… ~ ƒT˜ ¡H }9}S~ …Oƒ9„’…9‡h„£a"_8a | µ ~ …
|}6~ b€Za | 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~ b€Za | bfe0Z…½-‚†_ | ˜ ~ ./Aj>*> ,/M½„†… ™ dO…OeGa"„ | …9-‚
… | a€Za"„ | …K¸„’…^e | …jacb€-_3aF•„’a{ }O}6~ Ub"_H„†… 'Q!4tX !I2D#3Aj#1'r24!Ÿ„’…
— ¨=š ~ eF-‚†‚„†… ™ d9…OeGac„ | …9-‚
r + s
… | a€Za"„ | …he0-…h˜ ~ dO_ ~F™ dO‚ ™›| bƒO„†ƒ9-eGac„†e } dib }6| _ ~ _F•4_c„†…Oe ~ „’a ~ ” } šZ_c„ ~ _Ka"š ~ ™ -eGaIa"š9ZaI-… |}6~ b€Za | b
„†__c„†” } ‚’¡o_ }6~ eG„›-‚ ™ d9…OeGac„ | …?¸9„’…–-…– }O} ‚†„†eFZa"„ | …?• š |mŽ=~GD~ b0•9a"š ~v}6| „’…a„†_=a |  D| „†ƒ ™ dO…OeGa"„ | …9-‚
… | a€Za"„ | …¥-…OƒdO_ ~ a"š ~ „’… ¯i· … | a€Zac„ | …?—
¨š ~h| a"š ~ ba"šib ~F~ ˜-_c„’ehZb"„’acš9” ~ a"„†e |}6~ b€Ua"„ | …O_
Zb ~ _c„†”T„†‚†Zb0•O-…Oƒ–š ~ b ~Ž=~h| …O‚’¡{‡4„ D~ a"š ~ „£b
ƒ ~ eF‚›Ub€Za"„ | …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‚†_ |–|mD~ b"‚ | - ƒ½a"š ~ dO…9Zbc¡
b€Za | b0¸„†… ™ d9…OeGac„ | …9-‚ |}S~ €b Za | b… | a"Za"„ | ?
… •§„£aš9-_
- |}6~
"a š ~ _c-” ~ …Z” ~ Z_a"š ~ 
˜ „’…Ubc¡ D~ b"_c„ | …?•i˜9dia„’aš9-_ | …9‚£¡ | … ~ „†…O_3a ~ -ƒ |4™ a Ž=|¹} Zb€Z” ~ a ~ b"_G—V´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 ~ b€Za"„ | …9-‚9… dO”˜ ~ b"_G• Ž=~ … ~F~ ƒHa"š ~ b ~ ‚†Za"„ | …9-‚ |}6~ b€Ua | b"_ -_ Ž=~ ‚†‚1—¿ ~ b ~
„†_=a"š v
d -‚†„’a¢¡ |}6~ b€Z 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 ~ _ ~GD~ b€-‚ ™ dO…OeGa"„ | …O_ | b |}6~ b€Za | 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 Ž šO„†e€š | … ~ „†f
¨=š9„’_ } b | e ~ _c_„†_=e0-‚’‚ ~ ƒ$24P(,FCm> 2-AiMD'*!SR{CF,0)-2D>q:S#1'r24!p-…Oƒ | …9£‚ ¡Tƒ ~G}6~ …OƒO_ | …oa"š ~ a¢¡ }6~ _ |4™ a"š ~ e0-‚†‚
\KI8I
} Z b€-” ~ a ~ b"_F— e0-_ ~ _¹a"š9Za Ž=~
„†…
add (r, s)
b
e
c
_
_
Z

…
O
d
…
} | ~
D~ b"‚ | -ƒO„†…O‡‹b ~ _ | ‚†dia"„ | …$„†_acš ~ b ~F™›| b ~ ƒ | … ~ Zae | ” } „†‚ ~ a"„†” ~ —‹¨=š ~ b ~ Zb ~ a Ž=|
… ~F~ ƒ a | e | …O_c„†ƒ ~ bF¬ Ž=~ e0Z… ~ „’a"š ~ bš9 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¯ …Oƒ“T”HZa"e€šO„†…O‡ ™ dO…9e/a"„ | …<ƒ ~ eG‚›Zb€Zac„ | …?—œ=-…OƒO„†ƒ9Za ~ _]Zb ~ -‚’‚ ™ dO…9e/a"„ | …O_
…Z” ~ _3d9e€š\a"š9Zahacš ~o™ dO…OeGa"„ | …Œe0-‚†‚ „†_„†…$a"š ~ _ce |}6~o|4™ _ | ” ~ ƒ ~ eG‚›Zb€Zac„ | … |4™ —
f |4™
f
´1…½-ƒOƒO„’a"„ | …K•a"š ~ …d9”˜ ~ b |4™™›| b"”H-‚ } Zb€-” ~ a ~ b"_]”d9_rav”HUa"e€šza"š ~ … dO”˜ ~ b |4™ e0Z‚†‚ } Ub€-” ~ ®
a ~ bc_F•I-…Oƒ ~ -e€š½e0Z‚†‚ } Zb"-” ~ a ~ bf”dO_3av˜ ~N|4™ oa¢¡ }6~¹Ž š | _ ~k Z‚†d ~ _+e0Z…“˜ ~ e | … D~ bca ~ ƒ$a | a"š ~
e | bcb ~ _ }6| …OƒO„†…O‡ ™›| bc”H-‚ } 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…9ƒO„†ƒ9Za ~ _F—
± ¨š ~ b ~ „†_ | … ~ _ }6~ eF„›Z‚8b"dO‚ ~ a"š9Za_ | ” ~ ®
Argument-dependent name lookup (Koenig lookup).
a"„†” ~ _”HZµ ~ _a"š ~ ‚†„’_3a |4™ eF-…Oƒ9„’ƒUa ~ _‚†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-…OƒO„†ƒ9Za ~ _¦„†…+—¨=šO„†_¦„†_dO_ ~G™ d9‚”H-„†…O‚’¡ ™›| b |}6~ b€Ua | b"_-…OƒT-‚†‚ |mŽ _
a"š ~ ” a | ˜ ~ e0-‚’‚ ~ ƒ$dO… d9-‚†„ ¯9~ ƒ$„†…E„†… ¯i· … | a€Za"„ | …?—‹¨=š ~H}S| „†…a |4™ dO_c„†…O‡ |}6~ b€Za | b"_h„†…E„†… ¯O·
… | a€Za"„ | … Ž=| d9‚’ƒH˜ ~ _ }6| „†‚ ~ ƒo„ ™?Ž=~ š9-ƒHa | ” ~ …ja"„ | …Hh…9-” ~ _ } -e ~ _ | ” ~GŽ š ~ b ~ „†…Ha"š ~|}6~ b€Za | b
e0-‚’‚1—
| b ~ -e€šeF-…Oƒ9„’ƒUa ~I™ O
d …9e/a"„ | …Z…9ƒ ~ -e€še0Z‚†‚ } Zb€-” ~ a ~ 0b •m„’a
Resolution: Finding the best match.
„†_e€š ~ e"µ ~ ƒHš |mŽpŽ=~ ‚†‚(acš ~ e0-‚’‚ } Ub€-” ~ a ~ bIa°¡ }6~ ”HZa"e€š ~ _Ia"š ~ e | bcb ~ _ }S| …9ƒO„†…O‡ ™›| b"”H-‚ } Zb"-” ~ a ~ b
a¢¡ }6~ —H¨š ~ b ~ Zb ~k™›| dib d9-‚†„’a¢¡‹‚ ~GD~ ‚†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½_3a€Z…9ƒ9Zbcƒˆe | … D~ b"_c„ | … ™ b | ” a"š ~ e0-‚†‚
} Zb€Z” ~ a ~ ba¢¡ }6~ a | a"š ~+™›| b"”HZ‚ } Zb€Z” ~ a ~ b=a¢¡ }6~ —¤ ~ š9 D~ _ ~F~ …–a"š9Za
-‚†‚ ™ dO…9ƒ9-” ~ …a€-‚
Zbc„’a"šO” ~ a"„†ea°¡ }6~ _e0-…¥˜ ~ e | … D~ bca ~ ƒ–„’…a |~ -e€š | a"š ~ b˜ ¡{_3a€Z…9ƒ9Zbcƒ¥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‚†‚ } Zb€Z” ~ a ~ bNa¢¡ }6~ a | a"š ~–™›| b"”H-‚ } Zb€-” ~ a ~ k
b a¢¡ }S~ — ¤ a a | dO_ ~ b31® ƒ /~ ¯ … ~ ƒ
~ Ž ’„ ‚†‚‡ ~ T
e | … D~ b"_c„ | …9_ | …O‚’¡H‚›Za ~ b„’…{a"šO„†_=˜ | | µg—
¼ ™ dO…OeGa"„ | …
„†_=e0-‚’‚ ~ ƒElG,0#&#c,FCHa"š9-…
„’a"šob ~ _ }S~ eGaa |  } Zb€-” ~ a ~ b0•(„ ™ a"š ~ ”HZa"e€šoacšUa
f
gŽ
f
„†…OƒOdOe ~ _ | …–a"š9Za } Zb"-” ~ a ~ b„†_Za
‚ ~ -_3a-_
‡ | | ƒ‹-_
a"š ~ ”HZaceBš–„’…9ƒOdOe ~ ƒ–˜¡
—´ ™ 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#fW‘Aj#c.0%E„ ™ „’a]„†_˜ ~ a3a ~ ba"š9-…‘-…¡ | acš ~ bveF-…Oƒ9„’ƒUa ~
„†…‘-‚†‚
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¯ …O„’a"„ | …?•Da"š ~ b ~ „†_ Ua=” | _3a | … ~ ˜ ~ _3a=”HUa"e€šK•D˜9dia=„’a ”HF¡Nš9 }O}6~ …Ha"š9Za8acš ~ b ~
„†_… | ˜ ~ _3a”HZa"e€š?•O„†… Ž šO„†e€šeF-_ ~ acš ~v™ dO…9e/a"„ | …e0Z‚†‚»„’_ADWzl0'QR4:»24:S)F•9-…Oƒ¥acš ~ e | ” } „†‚ ~ b„†_3_cd ~ _
-… ~ bcb | b” ~ _c_"-‡ ~ —
¿ ~ b ~ „†_-… ~/· -” } ‚ ~ —¦œ | …O_c„†ƒ ~ ba"š ~ a Ž=|k|mD~ b"‚ | -ƒ ~ ƒ ™ dO…OeGa"„ | …{ƒ ~ eF‚›Zb€Ua"„ | …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š | _ ~ …K•O_c„’…9e ~ float e0Z…¥˜ ~} b | ” | a ~ ƒTa | double •(˜9dOa | …O‚’¡H_3a"-…OƒUb"ƒ(®
e | … D
 ~ bca ~ ƒa | unsigned int —´1…
int i = 1;
foo (i );
a"š ~ e0-‚†‚4„’_?-”˜9„†‡4d | dO_F•0_c„’…9e ~
e0-…v˜ ~ _ra€-…Oƒ9Zb"ƒ(®&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‚†ƒ<—F—F—
_3acb"dOeGac_e0Z…k˜ ~ d9_ ~ ƒka | -‡4‡b ~ ‡DZa ~ _ ~GD~ b€-‚9ƒO„ ºS~ b ~ …a¦a¢¡ }6~ _„†…ja |f| … ~ … ~GŽ
a¢¡ }6~ ¸
d …9ƒ ~ bc_3a€-…Oƒ“a"š ~ O
ƒ „g
4³ O
º ~ b ~ …Oe ~ ˜ ~ a Ž=~F~ …“acš ~ _3¡(…ja€-eGac„†e0-‚-…Oƒ“_ ~ ”HZ…a"„†eF-‚  Z‚†d ~ b€-…O‡ ~¹|4™ 
_3acb"dOeGa0¸
³ µ(… |mŽ
acšUa
œžfž
Operational.
™ dO…OeGa"„ | …9_-…Oƒ |}6~ b€Za | b"_=e0Z…¥˜ ~+|mD~ "b ‚ | -ƒ ~ ƒ?—
´1… } Zbca"„’eFdO‚›Zb0•j¡ | d–_cš | d9‚’ƒ{˜ ~ Z˜9‚ ~ a | —G—0—
± ² ³ ƒ G~ ¯ … ~ _3a3b"dOeGa"_ Ž š | _ ~ _ ~ ”H-…ja"„†e0-‚  -‚†d ~ b€-…O‡ ~ _e | cb b ~ _ }S| …9ƒ–a | acšUa |4™ 4
‡ „D
 ~ …‹”HZa"š ~ ®
”HZac„†e0-‚S_ ~ a"_F¸
± 4³ } b |m ’„ ƒ ~ ƒ ~/¯ O
… „’ac„ | …O_ |4™6™ dO…OeGa"„ | …O_ Z…9ƒ |mD~ "b ‚ | Zƒ ~ ƒ |}S~ b€Za | bc_ | …H_3acb"dOeGac_F•i-eFe | b"ƒO„†…O‡+a |
‡4„ D~ … ™ dO9
… e/a"„ | 9
… -‚†„’a¢¡g¸
± ³ Ž b"„’a ~} b | ‡b€Z”T_8a"š9Zaƒ ~/¯ … ~ -…Oƒ¥dO_ ~ _racb"dOeGa"_-eFe | bcƒ9„’…9‡a | 4
‡ „D
 ~ … ™ dO…OeGa"„ | …9-‚’„’a¢¡D—
\KI8I
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,/M“AO./.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š{a€Z˜9‚ ~ _„’…¥_ | ” ~]™›| b"”HZa
,1t !I,+A#17mJ6,
LZ24Ch.G24WJ?:S#1'*!SR;'*#&%N'*!?#c,°Ri,FCm)W<2-MD:g>@2 Y Aj#&%S,FW‘Aj#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"LCF,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)-2‹MO,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;='*!SR‘l0'*!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;='*!SR‘l0'*!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!¶A‘J?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!MˆA–LG:!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 );
\KI8I
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)–ADW‘lF'QR4:»24:S)ZY VXmJK>›AD'*! 7924:gC‹MO,G.G'1)G'r24!?)
V%('*)
,BX9,GCF.F'1)Z,hCF, 0:'*CF,F)724:‘#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"L2(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!?srW‘2-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>vW‘2-MD' t.BAj#1'324!?)ZY ],1LZ,FCF,F!I./, #17mJ6,0)\AD!M.G24!?)G#&s3#17mJ6,0)
.BAD!¶lG,Œ./24W‘l0'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"š ~ - ƒOƒO„’a"„ | …+-_c_c„†‡4…O” ~ …ja |}6~ b€Za | 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 ;
}
¤y„’a"šoa"šO„†_F• Ž=~ eF-… Ž bc„’a ~
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™ acš9„’_ Ž „†‚’‚… | aN˜ ~ acš ~ ƒ ~ _c„’b ~ ƒ
— ~ eF-‚†‚
| y
5/6

™b | ”
~ eGac„ | … (—’²— Ž š9ZaHš9 }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 ~ ƒ?•-…Oƒyacš ~ b ~ _cdO‚’a"„†…O‡  -‚†d ~ _oZb ~ dO_ ~ ƒˆa | „†…O„’a"„†-‚†„ ~ a"š ~
™›| b"”H-‚ } Zb"-” ~ a ~ bc_ a -…Oƒ b |4™ a"š ~¹™ dO…OeGa"„ | … operator+= —¨š ~ -‚’d ~ _ |4™ r -…Oƒ s Ub ~ … | a
e€š9-…O‡ ~ ƒ¥˜ ¡oa"š ~f™ d9…OeGac„ | …¥e0Z‚†‚1—
¿ ~ …Oe ~ • Ž „’a"š“a"š ~ Z˜ |UD~ „†” } ‚ ~ ” ~ …a€Ua"„ | … |4™
•a"š ~ PAj>w:», |4™ a"š ~T~/· } b ~ _c_c„ | …
operator+=
„’_I„†…Oƒ ~G~ ƒ
•D˜9diaIa"š ~ ƒ ~ _c„’b ~ ƒ‘, h,/.0#&•a"š ~ „†…OeGb ~ ” ~ …a |4™ •Dƒ | ~ _¦… | aš9 }O}6~ …?—¨=š9Za _
r += s
5/6
r
j
š
¡
‡
a

_
i
d
Ž
Ž=~ ~ 1/2
| a } dOa„†…oa"š ~ Z˜ |UD~]} „ ~ e ~v|4™ e | ƒ ~ —
´1… | b"ƒ ~ b=a | „†” } ‚ ~ ” ~ …a
b
b"‚£¡D• Ž=~ ”¹dO_3a ~ …U˜‚ ~™ d9…OeGac„ | …O_=a | eBš9-…O‡ ~ a"š ~
operator+= } |}6~
 -‚†d ~ _ |4™ a"š ~ „’be0-‚†‚ } Zb€-” ~ a ~ b"_F—  dib } b"„†_c„’…9‡4‚£¡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| …9ƒO„†…O‡HCF,1LZ,FCF,F!I./,T#17UJS,¥±*b ~ -ƒ -_ b ~F™›~ b ~ …Oe ~ ª | b b ~F™›~ b ~ …Oe ~ a | ª ³ —O´1…
©
©
„†_V„†ƒ ~ …ja"„†e0Z‚9a | —¨š ~ ƒO„ ºS~ b ~ …Oe ~ „†_V„†…Na"š ~ „†…O„’a"„†-‚†„0Ua"„ | …
 -‚†d ~ b€-…O‡ ~ Z…9ƒ ™ dO…OeGa"„ | …Z‚†„’a¢¡D• -…Oƒ–-_3_c„†‡4…O” ~ …a=_ ~ ”H-…ac„†eF_F—
¼  Zb"„›Z˜9‚ ~|4™ b ~F™›~ b ~ …Oe ~ a¢¡ }6~ ±&-‚†_ | e0-‚†‚ ~ ƒT¹CF,1LZ,FCF,F!I./, ³ e0-…T˜ ~ „†…O„’a"„›Z‚†„ ~ ƒ | …O‚’¡ ™ b | ”
-…“>qP Aj>q:§, |4™ a¢¡ }6~ • | b
Z…¡Ha¢¡ }6~fŽ š | _ ~] -‚’d ~ _e0Z…¥˜ ~ e | … D~ b3a ~ ƒa | —O¨=š ~ „†…O„’a"„†-‚†„0Ua"„ | …
”HZµ ~ _=„’a-…EAj>w'°Aj) |4™ a"š ~ ‚  Z‚†d ~ ¬¦-… | a"š ~ b…Z” ~f™›| ba"š ~f| ˜ ~ eGa˜ ~ šO„†…Oƒoa"š ~ ‚  -‚†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_c„†‡4…‹_ | ” ~ a"šO„†…O‡a |
´1… Ž b"„’a"„†…O‡
„†…¹acš ~ Z˜
j = 6
„’_-…-‚†„›-_ |4™ —
j
i
´1…a ~ b"…9-‚†‚’¡D•§  Z‚†d ~T|4™
a | —¨šO„†_ ~/· } ‚†-„†…O_ Ž š¡ Ž=~
a"šO„†…O‡4_=‚†„’µ ~
€e š9-…O‡ ~ ƒ“a |
a"š ~ b ~F™›~ b ~ …Oe
|mD~ } „ ~ e ~|4™
b G~ ™›~ bha | - … | a"š ~ b | ˜ ~ e/ah
~ • Ž=~ „†… ™ - e/a]-_c_c„’‡4…‹a | a"š ~
e | ƒ ~ • Ž=~ a"š ~ b ~G™›| b ~ e€š9-…O‡ ~
i
b „†…O„’a"„†-‚†„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"š ~ Zƒ9ƒib ~ c_ _ |4™ a"š N
} ~ ~ | ˜ ~ e/ah„’ab G~ ™›~ b"_
… ~G~ ‹
ƒ -…‚  -‚†d ~ a | †„ …O„’a"„›-‚’„ ~ hb ~F™›~ b ~ …Oe ~ ¢a ¡ 6
š ¡
} ~] Z b"„›Z˜9‚ ~ •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 „†…O„’ac„›-‚†„ ~ - … | 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 ™›| bc”H-‚ } Zb"-” ~ a ~ b |4™ b ~F™›~ b ~ …Oe ~ a°¡ }6~ •a"š ~ e | bcb ~ _ }S| …9ƒO„†…O‡eF-‚†‚ } m®
b€-” ~ a ~ b
”dO_3a˜ ~ -…–‚  -‚†d ~ ¸ Ž š ~ …a"š ~™ dO…OeGa"„ | …‹e0Z‚†‚»„’_ ~G -‚†d9Za ~ ƒ?•Oa"š ~ „†…O„’a"„†-‚†„0Ua"„ | … |4™ a"š ~
™›| b"”H-‚ } Zb€-” ~ a ~ b8”HUµ ~ _V„’a -…o-‚†„›-_ |4™ a"š ~ e0-‚’‚ } Zb€-” ~ a ~ b0—I´1…Ha"šO„†_ Ž 0¡D• Ž=~ e0-…H„†” } ‚ ~ ” ~ …a
™ dO…OeGa"„ | …O_=a"š9ZaeBš9-…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_ Ž „’acšb ~ _ }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-…ac„†eF_F¬
Ž=~+} -_c_
acš ~v} Ub€-” ~ a ~ b˜ ¡  Z‚†d ~ — …Oƒ ~ be0Z‚†‚»˜¡¥b ~F™›~ b ~ …Oe ~ •6a"š ~ -ƒOƒib ~ _3_ |4™ ± | b]¹b ~G™›~ b ~ …Oe ~
a | ³ acš ~ eF-‚†‚ } Zb"-” ~ a ~ bk„†_NdO_ ~ ƒya | „†…O„’a"„†-‚†„ ~ a"š ~–™›| b"”HZ‚ } Zb€Z” ~ a ~ b0¸dO…9ƒ ~ bHeF-‚†‚£®*˜ ¡®  Z‚†d ~
_ ~ ”HZ…a"„†eG_F•(„’a„†_ a"š ~f -‚†d ~f|4™ a"š ~ e0-‚†‚ } Zb€-” ~ a ~ b a"š9Za„†_dO_ ~ ƒ ™›| b„†…O„’a"„›-‚’„0Za"„ | …K—
¨š ~ ˜-_c„’ekb"dO‚ ~ „†_va |} -_c_h } Zb€Z” ~ a ~ bf˜ ¡“b ~F™›~ b ~ …Oe ~H| …O‚’¡<„ ™ a"š ~N™ dO…OeGa"„ | …$„†… d ~ _ra"„ | …
-eGacdZ‚†‚’¡… ~F~ ƒO_Va | e€š9-…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~ -_ Ž=~ ‚†‚1•I„’… Ž š9„’eBšEe0-_ ~HŽ=~ š9 D~
CF,0#1:C0!?sBl07srCG,1L-,FCG,F!I.G,H_ ~ ”H-…a"„’eF_]± | a"š ~ b Ž „†_ ~ • Ž=~ CF,0#1:C0!^l07–P 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 ~GD~ b
‚  -‚†d ~ _Zb ~v~/·(}S~ eGa ~ ƒ?—
¨šO„†_” ~ -…O_acšUaVa"š ~™ dO…OeGa"„ | …T„’a"_ ~ ‚ ™ e€š || _ ~ _
±Q˜ ¡NdO_c„’…9‡vb ~F™›~ b ~ …9e ~ a°¡ }6~ _ | b8… | a ³ Ž š ~ a"š ~ b
„’a"_?e0Z‚†‚ } Zb€-” ~ a ~ b"_?-…Oƒvb ~ a"dib"…  -‚†d ~ Zb ~ ‚  -‚†d ~ _ | bKb  -‚†d ~ _F—  ~ eGa"„ | … —†²—’² Z…9ƒ  ~ eGa"„ | … — —
ƒ | eFdO” ~ …jaa"š ~ _ ~ e€š | „’e ~ _ ™›| b+_ | ” ~h|4™ a"š ~|}6~ b€Ua | b"_ | … ™ dO…Oƒ9-” ~ …a"-‚§a¢¡ }6~ _F•6˜dia | …O‚’¡‹… |UŽ
Ž=~ d9…Oƒ ~ b"_ra€-…Oƒ¥a"š ~ ” ~ e€šZ…9„’_c”na"š9Za”HZµ ~ _=_cdOe€š–eBš | „†e ~ _ }S| _c_c„’˜9‚ ~ —
¼
_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/a0—z¨ | d9…Oƒ ~ "b _ra€-…Oƒ Ž š9Z a¥a ~ ” 6
˜ ~ eGa„’_F•‚ ~ adO_
} | 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 | dO˜9‚ ~ • _c„†…Oe ~ "a š ~™›| b"”HZ‚ } Zb€Z” ~ a
” „†…9Za ~ _G—§¨=šO„†_§” ~ Z9
… _Ka"š9Zaa"š ~ Zc_ _ | eG„›Za ~
™ dO…OeGa"„ | …he0Z‚†‚a ~ 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…9ƒha"š ~ Zƒ9ƒib ~ _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/a0•9-…Oƒ{a"š ~ b ~ _cdO‚’a"„’…9‡h˜ ~ 𐠁 „ | b |4™ "a š f
~ } b | ‡b"-”
j ~G™›~
dO…Oƒ ~/¯ … ~ ƒ?—
„†_
¤yš ~ … ~GD~ b
¡ | de/b ~ Z a ~ -…Z‚†„›-_ ™›| b-… | ˜ ~ eGa0• ~ …O_cdib ~ a"š9Zaacš ~f| ˜ ~ eGa
Reference Guideline:
ƒ | ~ _… | a ~B·(} „’b ~ ˜ ~F™›| b ~ a"š ~ Z‚†„›-_B—
„†…O‡i—
¨š ~ e | ” } †„ ‚ ~ bdO_cd9-‚†‚£¡… | ac„†e ~ _  „ | ‚†Za"„ | …O_ |4™ "a š ~ ~F™›~ b ~ …Oe ~ fdO„†ƒ ~ ‚’„†… ~ -…OƒN„†_c_cd ~ _V Ž Ub"…(®
4.2.4 More user-defined operators
~ a u_¦‡ ~ a¦˜-e"µha | a"š ~ -ƒOƒO„’a"„ |
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 Ž=| eBš9Zb"-eGa ~ bc_ | …O‚’¡D—
¼
_„’…a"š ~v} b ~G „ | dO_ ™ dO…OeGa"„ | …
•9a"š ~+™›| b"”H-‚ } Zb€Z” ~ 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_3„†‡4…O” ~ …a |}S~ b€Za | b
‡ „’…9…O„†…O‡ |4™
™ b | ” acš ~ ˜ ~ 4
”dO_3a˜ ~+} -_c_ ~ ‹
ƒ Z_

a
-‚†_ | b ~ acdObc…¥a"š ~ b ~ _cdO‚’a
// 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"š ~ bIZbc„’a"šO” ~ a"„†eZ_c_c„†‡4…O” ~ …ja |}6~ b€Za | b"_Zb ~ _c„’”T„†‚›Zb0•mZ…9ƒ Ž=~ ƒ | … ua»‚†„†_3aKa"š ~ ” š ~ b V
~ ~/· ®
š acš ~ Zbc„’a"šO” ~ a"„†eV-…Oƒ¹b ~ ‚›Za"„ | …9-‚ |}6~ b€Za | b"_ƒ9„’_ceFdO_c_ ~ ƒk„†…  ~ eG"a „ | … i—’²— •
} ‚†„†eF„£a"‚’¡D—»¨ | ‡ ~ a"š ~ b Ž „£a"
Ž=~ … |mŽ š9 D~ hd9_ ~F™ dO‚§_ ~ a |4™|}6~ b€Za"„ | …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˜ ¡
-…OƒNa"š ~™ dO…OeGa"„ | …TeF-‚†‚
b ‚›-e ~ ƒH˜¡
add
operator+
add (r, s) G~ }
—  a"„†‚†‚*• Ž=~ eF-…_ }6| a }6| a ~ …a"„›Z‚6„†” } b |UD~ ” ~ …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 ~ ƒ | „’…9‡„’a ™›| b ™ dO…9ƒ9-” ~ …a€-‚a°¡ }6~ _F—¦¼ ™ a ~ bZ‚†‚1• Ž=~Ž -…jaa | a"šO„†…iµ |4™ b"Za"„ | …9-‚
… dO”˜ ~ b-__3„†…O‡4‚ ~ -‚’d ~f™ b | ” a"š ~ _ ~ a]­`Z…9ƒ¥… | a-_=a Ž=|¹ -‚†d ~ _ ™ b | ” a"š ~ _ ~ a f—
(b | ” Ž š9Za Ž=~ š9 D~ ƒ | … ~ Z˜ |mD~ •g¡ | d‹e0-…‹‡4d ~ _c_acšUa-‚†‚ Ž=~ š9 D~ a | ƒ | „†_a |T|UD~ bc‚ | -ƒ
a"š ~o| dOa } dia |}6~ b€Ua | b
— ´1…pƒ9„’_ceFdO_c_c„†…O‡‹a"š ~¥| dia } dia |}6~ b€Za | bk„†…  ~ eGa"„ | …
—†²—†² Ž=~ š9 D~
<<
Zb"‡4d ~ ƒ–a"š9Zaa"š ~| dia } dia
_3acb ~ -” } -_3_ ~ ƒ‹a | -…Oƒ–b ~ a"dib"… ~ ƒ–˜¡¥a"š ~| dia } dia |}6~ b€Za | b”¹dO_3a˜ ~
-…‚  -‚’d ~ •9_3„†…Oe ~ acš ~v| dia } dOa |}6~ b"Za | b” | ƒO„ ¯9~ _ a"š ~ _3acb ~ Z”–—V¿
  „†…O‡¹b ~F™›~ b ~ …Oe ~ a¢¡ }S~ _
Za | dib
ƒO„†_ }6| _c-‚1•Oa"šO„†_
e0-… ~ Z_c„†‚’¡{˜ ~ ƒ | … ~ ¬ Ž=~ _3„†” } ‚’¡ } Z_c_-…Oƒ‹b ~ 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 ~ ¬ ™›| ba"š ~ „’… } dia0• Ž=~TŽ=| dO‚†ƒŒ„’…Ea"š ~ _"-” ~T™ Z_cšO„ | … ‚†„£µ ~
a | b ~G} ‚›- e ~ "a š ~ a =
… ac_
-…Oƒ
˜ ¡za"š ~
Ž | ’„ … } diaf_3a€Za ~ ” ~ std::cin >> r.n;
std::cin >> r.d;
_c„†…O‡4‚ ~ _3a"Za ~ ” ~ …ja
std :: cin > > r;
±&-…Oƒa"š ~ _c-” ~+™›| b
acš ~ „†… } dia |4™ ³ —¼‡D-„†…?• Ž=~ … ~G~ ƒ–a |k} -_c_]-…Oƒb ~ a"dib"…–a"š ~ „†… } dOa_3acb ~ -”
s
± |4™ a°¡ }6~
³ -_fHb ~F™›~ b ~ …Oe ~ —k´1…<-ƒOƒ9„£a"„ | …?• Ž=~ ”¹dO_3a } -_c_]a"š ~ b€Za"„ | …Z‚… dO”˜ ~ b
std::istream
a"š9Za Ž=~vŽ Z…a=a | b ~ -ƒ–-_hb ~F™›~ b ~ …9e ~ •g_c„’…9e ~ a"š ~ „†… } dOa |}6~ b€Za | bš9-_=a | ” | ƒ9„ ™ ¡T„’a"_  Z‚†d ~ —
¨š ~{|}6~ b€Za | b ¯ b"_3ab ~ Zƒ9_a"š ~ …d9” ~ b€Za | b ™ b | ” a"š ~ _3a3b ~ -”–• ™›| ‚†‚ |mŽ=~ ƒŒ˜¡\‹_ ~G} Zb€Ua"„†…O‡
e€š9Zb€-eGa ~ b0•SZ…9ƒ ¯ …9-‚†‚£¡oacš ~ ƒ ~ … | ”T„†…9Za | b0—V¨š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„†…O‡4_ e0-…o‡ |Ž b | …O‡i• ~ — ‡i—’• „ ™ acš ~ dO_ ~ b ~ …ja ~ bc_=acš ~ e€š9Zb€-e/a ~ b
operator<<
_ ~ d ~ …Oe ~
ª
š … b ” a ƒ
b
+b€Ua"„ | …9-‚g…dO”˜ ~ b0—¼
‚†_ | • Ž=~} b | ˜Z˜9‚’¡kƒ | … a Ž -…a a |
© A/B Ž ~ } | } ~ ™›|
-eFe ~G} a
-_fTb"Za"„ | …9-‚»… dO”˜ ~ bf-_ | dibv„’… } dia |}6~ b"Za | b]ƒ | ~ _G—h¨š ~ b ~ Ub ~ ” ~ e€šZ…9„’_c”T_a |
3.4
ƒ ~ -‚ Ž „£a"š¥_cdOe€š–„†_c_3d ~ _F•i˜dia Ž=~fŽ=| … aƒO„†_3eFdO_c_acš ~ ”š ~ b ~ —
~ a+dO_+e | …9eG‚†dOƒ ~ a"šO„†_f_ ~ eGac„ | … Ž „£a"š<T˜ ~ ZdOac„ ¯9~ ƒ D~ bc_c„ | … |4™ b | ‡b€Z” (—¤yšUa+”HZµ ~ _
a"šO„†_ D~ b"_c„ | … ~GD~ …o…O„†e ~ b „†_¦a"š ~
™ -eGa8acšUaV„†…Nacš ~
dO…OeGa"„ | …?•Da"š ~ … ~GŽ a¢¡ }6~ „†_d9_ ~ ƒ ~/· -e/a"‚’¡
main ™
‚†„’µ ~ -… Za | ”T„†eFª ™ dO…Oƒ9-” ~ …ja€-‚Sa¢¡ }6~ _cdOe€š‹-_
—
©
int
(1]I
(¦
1´ …“a"š ~ _ } „£b"„’a |4™  ~ eGac„ | … (—†²— | …<” | ƒOdO‚›Zb"„FZa"„ | …?• Ž=~ -eGacdZ‚†‚’¡–_ } ‚†„£afacš ~} b | ‡b€-” „†…ja |
a"šib ~F~¯ ‚ ~ _F¬ ¯ ‚ ~
a"š9Zae | …a€-„’…9_a"š ~ ƒ ~/¯ …O„’ac„ | … |4™ a"š ~ _3acb"dOe/a
•?Z‚ …O‡
rational.h
rational |
Ž „£a"škƒ ~ eF‚†Zb€Za"„ | …9_ |4™ a"š ~|UD~ bc‚ | -ƒ ~ ƒ |}6~ b€Za | b"_G¸  ¯ ‚ ~ rational.C a"š9Zae | …a"-„†…O_¦acš ~ ƒ ~G¯ …9„w®
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~
-…Oƒa"š ~8|}S~ b€Za"„ | …9_ | …h„’a§„†…a | …9-” ~ _ } -e ~
rational
„†… | bcƒ ~ ba |  D| „’ƒ }6| _c_c„£˜‚ ~ …9-” ~ eF‚†-_cš ~ _F—
b"eF„†_ ~
-_3µ _¡ | d¥a | -eGa"d9-‚’‚’¡T„†…ja ~ ‡b€Za ~
·i~
ifm
a"š ~ … ~GŽ b€Zac„ | …9-‚6… dO”˜ ~ ba°¡ }6~ „’…a | a"š ~ ”HZa"š{‚†„’˜Ob€Zb3¡oacšUa¡ | d–š9 D~ ˜9dO„†‚’a„†…
bceF„†_ ~ •
·i~
_ | a"š9Za b | ‡b€Z” 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"š ~ -ƒOƒO„’a"„ | …
a"š | dO‡4šEacš9„’_ |}6~ b€Za | bƒ |~ _T!I2D#¹„’…a
~ eF„ ~ …OeG¡ ™ -…9Za"„†e=„†…¹¡ | dN”T„†‡4ša_3d9‡4‡
-…j¡ Ž F¡S¬
|}6~ b€Za
~ …Oƒ$a |
~ _3aa |
| b ›™ | b]b€Zac„ | …9-‚… dO”˜
eBš9-…O‡ ~ a"š ~N -‚†d ~ _
_ }6~G~ ƒTd } a"šO„†_ |}6~ b€Ua
~ b"_ ™ b | ” b | ‡b€Z” (—+¼
‚£®
|4™ „£a"_e0-‚†‚ } Zb"-” ~ a ~ bc_F•a"š ~
| b˜¡d9_3„†…O‡vb ~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"š ~
„†…O„’a"„†-‚†„0Ua"„ | … |4™  ™›| b"”HZ‚ } Ub€-” ~ a ~ b„†_ƒ | … ~ ˜ ¡e |} ¡ „†…O‡ °dO_3av24!I,+Zƒ9ƒib ~ _c_F•Db€Za"š ~ b¦a"š9-…¥#1;]2
Z‚†d ~ _I-_»„†…a"š ~ ” ~ ”˜ ~ br® Ž „’_ ~ e |} ¡va"š9Za§a€Uµ ~ _ } ‚›-e ~ dO…Oƒ ~ ba"š ~ e0Z‚†‚£®1˜¡®  -‚’d ~ _ ~ ”H-…ja"„†eF_G—
int 
…z„ ™ a"š ~ _"  „†…O‡k„’__c”HZ‚†‚6„†…{acš9„’_ ~/· -” } ‚ ~ • ¡ | d–eF-…„†”H-‡4„’… ~ a"š9Za” ~ ”˜ ~ b3® Ž „†_ ~ e |} ¡
D~
e0-…‹˜ ~h} b ~ aca¢¡ ~B·(}6~ …O_c„ D~ „’…‘_3a3b"dOeGa"_a"š9Za]Zb ~ ” | b ~~ ‚›Z˜ | b€Za ~ acšZ…
¸?„†…ze | …acb"-_3a0•
rational
e0-‚’‚?˜¡Hb ~F™›~ b ~ …9e ~ „†_ ™ -_3a ™›| b¹Aj>*>»a°¡ }6~ _F• ~GD~ …a"š ~ ” | _3ae | ” } ‚†„’e0Za ~ ƒ | … ~ _F—
… ™›| bca"dO…9Za ~ ‚£¡D•Va"š ~ e0-‚’‚ } Zb€Z” ~ a ~ b"_”d9_rak˜ ~ ‚  -‚’d ~ _kdO…Oƒ ~ bNe0-‚’‚˜ ¡Œb ~F™›~ b ~ …Oe ~ •_ |“Ž=~
e0-… a Ž b"„’a ~ a"š ~~/·(} b ~ _c_c„ | …
• b
-” } ‚ ~ • ~GD~ …„ ™
Zb
Zb"„›U˜‚ ~ _ |4™ a°¡ }6~
a + b + c ™›| ~/·
a, b, c ~

± š
¡ ³ —  ac„†‚†‚1•Sa"š ~™ -_3a ~ b D~ bc_c„ | …“”T„†‡4šja Ž=| bcµz„†… | dOb+ }O} ‚†„†e0Ua"„ | …?¸S„’afƒ | ~ _f_ | „†…
rational Ž
b
‡
€
b

”
i
²
•
|
™›| b ~/· Z” } ‚ ~ •_3„†…Oe ~ „†…Ta"šO„†_ } b | ‡b"-”–• Ž=~ e0-‚†‚ operator+ Ž „’a"šT‚  -‚†d ~|}S~ b€-…OƒO_
| …O‚’¡D—
… ~ ‚ ~ _c_ | ˜  „ | dO_±1-…Oƒ“”¹dOe€š<” | b ~ ƒZ…9‡ ~ b | dO_ ³ } b | ˜9‚ ~ ”
b ~ ”H-„†…O_F•Sacš | dO‡4š?¬]„†… } -_3_c„†…O‡
a"š ~–} Zb€-” ~ a ~ b"_H-_Hb ~F™›~ b ~ …Oe ~ _F• Ž=~ Aj>*> 24; a"š ~z|}6~ b€Za | bTa | e€š9-…O‡ ~ a"š ~‹ -‚†d ~ _ |4™ „’a"_He0-‚†‚
} Zb€-” ~ a ~ b"_8„’…oa"š ~
¯ b"_3a } ‚›Ze ~ • ~GD~ …¥„ ™ a"š9Za=š9 }O}6~ …O_ dO…O„†…a ~ …a"„ | …Z‚†‚’¡D—»´1… ™ dO…OeGa"„ | …O_Va"š9ZaUb ~
‚›Zbc‡ ~ b
a"š9-…–a"š ~ Z˜ |mD~
•S„’aeF-… ~ -_c„†‚£¡š9 }O}6~ …–a"š9Za Ž=~ ” | ƒO„ ™ ¡o_ | ” ~|4™ a"š ~ e0-‚†‚
operator+
} Zb€-” ~ a ~ b"_=_c„†” } ‚’¡¹˜ ¡{”T„†_3a€Uµ ~ —
| a”HZµ „†…O‡k_cdOe€š<”T„’_3a€Zµ ~ _„†_
a"š ~+} b"„†” ~ b ~ _ }S| …9_3„’˜9„†‚†„’a¢¡ |4™ a"š ~} b | ‡b€-”T” ~ b0• |4™ e | dib"_ ~ •
˜9diaa"š ~ eG‚ ~GD~ b } b | ‡b"-”T” ~ b=e0-‚’‚†_acš ~v} b | ‡b€-”T”T„†…O‡h‚›-…O‡4d9-‡ ~]™›| bš ~ ‚ }–Ž š ~ … ~GD~ b }6| _3_c„’˜9‚ ~ —
„’_=h˜-ƒ{” |UD~ •(_c„†…Oe ~ „’a=„†…jacb | ƒ9dOe ~ _
´1…{acš9„’_ _ } „’b"„’a0•ja"š ~ Z˜ |mD~ ~ eF„ ~ …9e/¡ ¯i· ª ™›| b
operator+
©
… ~/Ž }S| _c_c„’˜9‚ ~ _ | dib"e ~v|4™§~ b3b | b"_F—
´ ™ a"šO„†_]_ | dO…OƒO_fa || U˜_racb€-eGa ™›| bv¡ | dK•Kš ~ b ~ „†_v-… ~/· -” } ‚ ~Ž š ~ b ~ „’af„†_f_c„†” } ‚’¡ Ž b | …O‡Ha |
” |mD~ a | e0Z‚†‚£®1˜¡®*b ~F™›~ b ~ …9e ~ _ ~ ”HZ…a"„†eG_F¸4a"š ~ e | ” } „†‚ ~ bIš9-_¦… | e€š9-…Oe ~ a | ƒ ~ a ~ e/aa"šO„†_ ~ b3b | bV_3„†…Oe ~
„’a„†_ } dib ~ ‚’¡{_ ~ ”HZ…a"„†eF-‚1—=œ | …O_c„†ƒ ~ bacš ~ dO…Ubc¡_cdi˜Oacb€ZeGa"„ | … |}S~ b€Za | 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…9‡4„’…9‡ha"šO„†_=a |
rational operator - ( rational & a)
{
a .n = - a .n;
return a ;
}
š9-_ƒib€-_3a"„’e–±&-…OƒŒdO…Oƒ ~ _c„’b ~ ƒ ³ e | …O_ ~ d ~ …Oe ~ ¬Na"š ~T~/·(} b ~ _3_c„ | …
„†‚’‚V_3a"„’‚†‚Vš9 D~ acš ~ _c-” ~
-a Ž
 -‚†d ~ -_˜ ~F™›| b ~ •j˜9dOa8„’a Ž „†‚†‚Oš9 D~ a"š ~ -ƒOƒO„’a"„ | …Z‚ ~GºS~ e/a |4™ eBš9-…O‡4„†…O‡fa"š ~ -‚†d ~
|4™ —I¤ ~ š9 D~
a
-eFeG„†ƒ ~ …a€Z‚†‚’¡(ªeGb ~ Za ~ ƒe | ” } ‚ ~ a ~ ‚’¡TƒO„ ºg~ b ~ …ja |}S~ b€Za | bF—
©
¼
_f”H-…¡ | a"š ~ bfšO„†‡4š(®&‚ ~GD~ ‚ } b | ‡b€-”T”T„†…O‡¹‚›-…O‡4d9-‡ ~ _F•Kœžvž |ºg~ b"_T” ~ e€š9-…O„†_c” acšUa „ ™} b |}6~ b"‚’¡$dO_ ~ ƒ ^Z‚†‚ |mŽ _ha"š ~ e | ” } „’‚ ~ ba | ƒ ~ a ~ eGakdO…9ƒ ~ _3„’b ~ ƒ\e€š9-…O‡ ~ _ |4™ -‚†d ~ _¹-_k„†…Ea"š ~
} b ~G „ | dO_ ~B· -” } ‚ ~ —¨=š ~ „†ƒ ~ h„†_ a | J?CF24W¥'*)-,ha"š9Zahe ~ bca€Z„†…  -‚†d ~Ž „†‚’‚g… | a=˜ ~ eBš9-…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_cdi˜Oacb€ZeGa"„ | … |}6~ b€Ua | b0•(a"š ~ ± ™ -‚†_ ~ ³ } b | ”T„†_ ~ e0-…o˜ ~ ‡4„ D~ …Z_ ™›| ‚†‚ |UŽ _F• dO_c„†…O‡a"š ~
µ ~ ¡ Ž=| b"ƒ
—
const
rational operator - ( const rational & a)
{
a .n = - a .n ; // error : a was promised to be constant
return a ;
}
´1…Ne | ” } „†‚’„†…O‡a"šO„†_  Zbc„›-…a |4™ acš ~|}6~ b"Za | b0•4a"š ~ e | ” } „†‚ ~ b Ž „†‚†‚(„†_3_cd
„†…O‡ | diaa"š ~ ”T„’_3a€Zµ ~ —¤ ~ e0-…a"š ~ … ¯O· „’a˜ ¡ ~ „’a"š ~ b‡ | „†…O‡˜gZe€µoa
| b˜ ¡{„†…acb | ƒOdOeF„†…O‡b ~ _cdO‚’a  Zbc„›Z˜9‚ ~ ‚†„’µ ~ „†… operator+ Z˜ |mD~ —
(b | ” a"š ~ _3acb"„†e/a"‚’¡ ™ dO…OeGa"„ | …Z‚ }6| „†…ja |4™  „ ~GŽ •Ia"šO„†_ } b | ”T„†_ ~ ”
-…Oƒ$a"š ~ b ~ Zb ~N} b | ‡b€-”T”T„’…9‡{‚›-…O‡4d9-‡ ~ _„’…ŒdO_ ~ a"š9Zaƒ | … uahš9 D~
~ - … ~ bcb | b” ~ c_ _"-‡ ~ • }S| „†…a3®
| e0-‚†‚£®*˜ ¡j®  -‚†d ~ _ ~ ”H- …ac„†eF_F•
~ €e šZ…9„’_c” „†_h_cd 6
} ~ b « d | dO_F•
„£aH±¢œ¶dO_ ~ Œ
ƒ a | ˜ ~ _cdOeBš 
(1]I
(¦
›‚ -…O‡4d9-‡ ~ •4dO…ja"„†‚(a"š ~
µ ¡
b"ƒ Ž Z_V-ƒOƒ ~ ƒ¹„†…²
•D” | a"„  Za ~ ƒ˜¡¹„£a"__cdOeFe ~ _c_V„†…Tœžvž ³ —
const ~ Ž=|
¼
‚†_ | •i… | ˜ | ƒi¡ ™›| b"e ~ _d9_a | ”HUµ ~ dO_ ~v|4™ a"š ~f} b | ”T„†_ ~ ” ~ e€š9-…O„†_c”–— Vdiaa"š ~vŽ š | ‚ ~]}S| „†…a |4™
šO„†‡4š(®&‚ ~/D~ ‚ } b | ‡b"-”T”T„†…O‡ ‚›-…O‡4d9-‡ ~ _K„†_§a | ”HZµ ~ acš ~} b | ‡b€-”T” ~ b u_6‚†„ ™›~~ -_c„ ~ b0¸a"š ~ e | ” } „†‚ ~ b?„†_
| dib ™ b"„ ~ …9ƒHZ…9ƒHe0Z…Tš ~ ‚ } d9_a |  D| „†ƒT”H-…j¡¹a"„’” ~ ®&e | …O_cdO”T„†…O‡ ~ b3b | b"_F—¨š ~ const ” ~ e€š9-…O„†_c”
„†_f‚†„’µ ~ oe€š ~ e"µ“ƒO„†‡4„£a0¬
˜ ¡ } b |U „†ƒO„†…O‡¥Zƒ9ƒO„’ac„ | …9-‚§b ~ ƒOdO…Oƒ9-…avƒ9Za€–±*a"š ~
µ ¡
b"ƒ ³ • Ž=~
const ~ Ž=|
”HZµ ~ _cdib ~ a"š9Za„†…Oe | …O_c„’_3a ~ …OeF„ ~ _h„†…Eacš ~TŽ š | ‚ ~ ƒ9Za€_ ~ a{±*a"š ~N} b | ‡b€Z” ³ Zb ~ -dia | ”HZac„†e0-‚†‚£¡
ƒ ~ a ~ e/a ~ ƒ?—
Definition.
const
´™ „†_Z…¡Ha¢¡ }6~ •ia"š ~ …
„†_+acš ~ .G24!?)F#&s 0:»Aj>q' t,BMŒa¢¡ }6~ ±1e | …O_3ar®1a¢¡ }6~T™›| b_cš | bca ³ |4™
#17mJ6,0—I¨=š ~ 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"_  Z‚†d ~ ±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 Z‚†d ~ b"-…O‡ ~ Z…9ƒ ™
…O_3a3®*a¢¡ }6~ „†_+… | ah-‚†‚ |mŽ=~
} b | ”T„’_ ~ •Z…9ƒ“acš ~ e | ”
: !MO,FCm>q7'Q!SR
g
d9…OeGac„ | …9-‚†„’a¢¡
ƒ“a | e€š9-…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_c„’‡4…9” ~ …a
•»_3„†…Oe ~
š9-_
n = 6
n
a"š ~ e | …O_3a3®1a¢¡ }6~
—
const int
-‚†d ~ _
… _3a3®*a¢¡ }6~ ”¹dO_3a-‚ Ž 0¡ _ ˜ ~ „†…O„’ac„›-‚†„ ~ ƒ?—»¤<bc„’a"„†…O‡
|4™ e | O
const int n ; // error : uninitialized constant
„†_„†‚†‚ ~ ‡D-‚±&-…Oƒ{”HZµ ~ _… | _ ~ …O_ ~ •_c„’…9e ~vŽ=~ e0-…… ~GD~ b
-_c_c„’‡4…  -‚’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"‚£¡(„†…O‡a¢¡ }6~ | O
const
~ …Ha"š ~ ‚  -‚†d ~ †„ _=-_3_ | eF„†Za ~ ƒ Ž „£a"šH+e | …O_3a€Z…ah2(l
-,G.0#&— | b ~/· Z” }
b ”T„†_ ~ _]a"š9Zafa"š ~k Z‚†d ~k|4™ a"š ~¹| ˜ ~ eGav˜ ~ šO„†…Oƒ<a"š ~k
const int n = 5 } |
˜ ~ ” | ƒ9„ ¯~ ƒK— ¤ ~ ”H0¡<±&-eFeG„†ƒ ~ …a€Z‚†‚’¡ ³ acbc¡¥a | e€š ~ ZafZb | dO…Oƒ–a"šO„†_ } b | ”T„†_ ~
…9-” ~]™›| bacš ~f| ˜ ~ eGa0•i˜9dOa=a"š ~ e | ” } „†‚ ~ b Ž „†‚†‚6e0Ua"e€šdO_F¬
„†_ … | a+b ~F™›~ b ~ …Oe ~
‚ ~ •jacš ~ ƒ ~ eG‚›Zb€Zac„ | …
Zb"„†Z˜9‚ ~
„†‚†‚… | a
n Ž
˜ ¡–dO_c„’…9‡HZ… | 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_c„†‡4…Na | ³ Z… ~B·(} b ~ _c_3„ | … |4™
const
¢a ¡ }6~ •S_c„†…Oe ~ acšUa Ž=| dO‚†ƒ–eGb ~ Za ~ k” | ƒ9„ ¯ U˜‚ ~ -‚†„›-_ ™›| bf-… | ˜ ~ eGa
a"š9Za Ž -_ } b | ”T„†_ ~ ƒ¥a |
˜ ~ e | …O_3a€-…ja0—
…Ta"š ~
| acš ~ b š9-…OƒK•-…T‚  -‚†d ~ ±&-eGa"d9-‚’‚’¡D•D-…¡ ~/·(} b ~ _c_c„ | … ³ |4™ a¢¡ }S~
„’_a"š ~ -‚’„›-_
const
|4™ Z… | ˜ ~ eGa0•6˜9dOafa"š9Za | ˜ ~ eGav„†_h!I2D#+… ~ e ~ _3_"Zb"„†‚£¡‹e | …O_3a€-…ja+„’ac_ ~ ‚ ™ —h¨=š ~ e | …9_ra3® dZ‚†„ ¯ e0Za"„ | …
„†…Ta"šO„†_8eF-_ ~ „†_8” ~ b ~ ‚’¡T } b | ”T„’_ ~ a"š9ZaVa"š ~| ˜ ~ eGa _  -‚†d ~
Ž „’‚†‚… | a8˜ ~ ” | ƒO„ ¯9~ ƒ#&%(CF24:9RD%–a"š ~
-‚†„†-_ „†… d ~ _3a"„ | …?—¦¿ ~ b ~ „†_-… ~/· -” } ‚ ~ a"š9Za„†‚†‚†dO_3a3b€Za ~ _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 ~ • Ž=~ ƒ | … | akš9 D~ ze | O
… _3a€-…ja“2(l
-,G.0#&•=˜9dOaN<e | …O_3a€Z…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™ Z‚†‚1•-a"š ~ a¢¡ }S~ …9-” ~
„†_ } Zb€-…ja"š ~ _c„ ~ ƒkZ_
± ³ •4„1— ~ — Ž=~ ‡ ~ ae |
const
const
…  }O}6~ Zb+„†…“b
 -‚†d ~ _ |4™ b ~G™›~ b ~ …Oe ~ a¢¡ }6~ —œ | …O_3a3®1b ~F™›~ b ~ …Oe ~ _¹Ub ~kD~ 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_3a€Z…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_acšUa Ž=~ Zb ~ … | a]e€šZ…9‡4„’…9‡Nacš ~ -‚†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"‚’¡¥ƒ9„’ƒ9… a
_ | ‚ D~ ¡ ~ a0¬ } -_c_3„†…O‡ } Ub€-” ~ a ~ b"_˜ ¡¥b ~F™›~ b ~ …9e ~ b ~ dO„’b ~ _‚  -‚’d ~ _]-_e0-‚†‚
} Zb€-” ~ a ~ b"_F•DZ…9ƒa"šO„†_I_ ~/D~ b ~ ‚’¡b ~ _3acb"„†e/a"_Ia"š ~  }9} ‚†„’e0Z˜9„†‚†„’a¢¡ |4™ a"š ~|}6~ b€Za | b0— | bca"dO…9Za ~ ‚’¡D•acš9„’_
„†_¦… | …i®1„†_c_cd ~ ¬§e | …O_3a3®1b ~F™›~ b ~ …Oe ~ _
±1„†… } Ubca"„†eFdO‚›Ub0• ™›| b"”H-‚ } Ub€-” ~ a ~ b"_ |4™ e | …O_3ar®1b ~F™›~ b ~ …Oe ~ ®*a°¡ }6~ ³
e0-…{˜ ~ „’…9„£a"„›-‚†„ ~ ƒ ™ b | ” b  Z‚†d ~ _Z_ Ž=~ ‚’‚1—¨šO„†_” ~ -…O_ a"š9Za Ž=~ eF-… Ž bc„’a ~
const int & i = 3;
~ šO„†…Oƒvacš ~ _ce ~ … ~ _F•Za"š ~ e | ” } „†‚ ~ bSeGb ~ Za ~ _§ a ~ ” }S| b€Zbc¡ | ˜ ~
-ƒOƒib ~ _c_ |4™ a"šO„†_a ~ ” }6| b€Zbc¡ | ˜ ~ eGa8„’_8dO_ ~ ƒTa | „†…O„’ac„›-‚†„ ~ a"š ~
”HZµ ~ _h_3dOb ~ acšUaha"š ~ a ~ ” }6| b€Ubc¡ | ˜ ~ eGaƒ | ~ _h… | a ~/· } „’b ~
b ~F™›~ b"_a | „’af±1_ ~F~ a"š ~ ~F™›~ b ~ …9e ~ fdO„†ƒ ~ ‚†„’… ~| … -‡ ~
³ —
¨š ~ _"-” ~ š9 }O}6~ …9_ Ž š ~ …“ ™›| b"”H-‚ ™ dO…OeGa"„ | … } Zb€Z” ~ 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-…Oƒva"š ~
~ e | ” } „†‚ ~ b
b ~ …Oe ~ acšUa
3
~ b |4™ e | …O_3a3®*b ~F™›~ b ~ …Oe ~ ®1a¢¡ }6~ „†_„†…O„£®
(1]I
²
(¦
¼
„’_+a"š ~ b ~F™›| b ~ a"š ~ -‚†‚£®1„†…(® | … ~ ƒ ~/ „†e ~ _cdO„’a€Z˜9‚ ~¹™›| b ~GD~ bc¡
} Z b€-” ~ a ~ b |4™ a¢¡ }6~ const } dib }6| _ ~ ¬¹' L\a"š ~ e0-‚†‚ } Zb€-” ~ a ~ b+„’_-…½‚  -‚†d ~ •Ka"š ~ „†…O„’ac„›-‚†„FZa"„ | …–„†_ D~ bc¡ ~ eF„ ~ …aN± | …9‚£¡<„’ac_
-ƒOƒib ~ _c_{… ~F~ ƒO_¥a | ˜ ~ e |} „ ~ ƒ ³ •]Z…9ƒ | a"š ~ b Ž „’_ ~ • Ž=~<~ _c_ ~ …ja"„›-‚†‚£¡ ™ Z‚†‚˜gZe€µˆa | eF-‚†‚£®*˜ ¡®  Z‚†d ~
_ ~ ”HZ…a"„†eG_F—
-_N
~ _ } „’a ~ a"šO„†_F•Va"š ~ b ~ Zb ~ _3a"„†‚’‚_3„’a"d9Za"„ | …O_ Ž š ~ b ~ „†_ } b ~F™›~ bcb"Z˜9‚ ~¥|mD~ b const } Zb€-” ~ a ~ bIa¢¡ }6~ —´ ™ „’_ ™ dO…OƒZ” ~ …a€Z‚ a¢¡ }6~| b8]_3acbcd9e/a Ž „’a"š_c”H-‚†‚(” ~ ” | bc¡+b ~ dO„’b ~ ” ~ …a"_F•
„’a ƒ |~ _=… | a } F¡ |º a | ” |mD~ a |
•(_3„†…Oe ~ a"š ~ _"  „†…O‡„†…Hš9-…Oƒ9‚’„†…O‡‚  -‚†d ~} Zb€-” ~ a ~ b"_
const
„†_=_ | _c”H-‚†‚»± | b ~GD~ …… | … ~/· „’_3a ~ …ja ³ a"š9Za„’a Ž=| … ua=e | ” }6~ …9_cZa ~™›| ba"š ~ ±1_3‚†„†‡4šac‚’¡ ³ ” | b ~ e | _3a"‚’¡
-eFe ~ _c_
a | a"š ~™›| bc”H-‚ ™ dO…OeGa"„ | … } Zb"-” ~ a ~ b„†…–a"š ~™ dO…OeGa"„ | …˜ | ƒi¡D—´1…Oƒ ~F~ ƒ?•SeF-‚†‚»˜¡¥b ~G™›~ b ~ …Oe ~
-ƒOƒO_ | … ~ „†…Oƒ9„£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"_§-ƒOƒib ~ _c_IZ…9ƒacš ~ …‚ | | µfd } acš ~ -eGa"d9-‚  -‚†d ~
Zaa"š9Za-ƒOƒib ~ _3_F— …9ƒ ~ be0-‚†‚w®1˜ ¡j®  -‚†d ~ _ ~ ”H-…ac„†eF_F•ia"š ~ -ƒOƒib ~ _3_ |4™ a"š ~v -‚†d ~ „†_ š9Zb"ƒ Ž „’b ~ ƒOª
©
±&-…Oƒob ~F™›~ b"_a | _ | ” ~]| ˜ ~ eGa | …¥a"š ~ eF-‚†‚6_3a€Ze€µg•_ ~F~  ~ e/a"„ | … (— — 4³ —
¼
‚†_ | •4„£a„’_ |4™ a ~ …ke | … D~ …O„ ~ …jaa | dO_ ~ a"š ~™›| bc”H-‚ } Zb€-” ~ a ~ b-_‚ | eF-‚  Zb"„›Z˜9‚ ~ Z…9ƒ¹” | ƒO„ ™ ¡
„’a"_  -‚†d ~ ±1_ ~F~
Z˜
³ ¸ bacšUa0•i„’a"_ a¢¡ }6~ ”¹dO_3a… | a=˜ ~ e | …O_3ar®1a¢¡ }6~ —
operator- |mD~ ™›|
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"ƒ„†_=‚ ~ ‡DZ‚S˜diaš9-_=… |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 ~
acšUaN„’ak„†_¥!I2D#H‡ ~ … ~ b€-‚’‚’¡  -‚’„†ƒ\a | b ~G} ‚›Ze ~ b ~ acdObc… a¢¡ }6~ ˜¡
¸ Ž šO„†‚ ~
const
a"šO„†__" ™›~ ‚£¡ Ž=| bcµ _ ™›| b¹a"š ~¥™›| b"”H-‚ } Zb"-” ~ a ~ ba¢¡ }S~ _F• „’ae0-… ™›| b¹a"š ~ b ~ a"dib"…\a¢¡ }6~ b ~ _cdO‚’a¹„†…
_3¡ …a€-e/a"„†e0-‚’‚’¡Te | bcb ~ eGa˜9dia_ ~ ”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"„†…O‡Ha"š ~
_3a€Za ~ ” ~ …aF•Sa"š ~ b ~ a"dib"…  -‚†d ~ ±*„†…zacš9„’_feF-_ ~ He | …O_3a3®*b ~F™›~ b ~ …Oe ~ ³ a |
return
˜ k

3
_
_
$
ƒ
a
"
a
š
0
e

†
‚
‚
b
~ }
~
|
~
~ |4™ a"š ~T™ dO…OeGa"„ | …½„’_„†…O„’a"„›Z‚†„ ~ ƒ Ž „’acš“a"š ~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‚  Z‚†d ~ _c„†” } ‚’¡$”HUµ ~ _k„’ak-…
-‚†„†-_ |4™ a"š ~ ‚  -‚†d ~ — Vdiaa"š ~ ‚  -‚†d ~ „†… d ~ _3a"„ | …‘±1…9-” ~ ‚’¡
³ „†_h‚ | eF-‚  Zbc„›Z˜9‚ ~
Ž š | _ ~
result
” ~ ” | bc¡¥„†_ ™ b ~F~ ƒ½Z…9ƒ Ž š | _ ~ -ƒOƒib ~ _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 ~ ƒ | ˜ ~ eGaF•g-…Oƒ–dO_c„†…O‡a"šO„†_b ~G™›~ b ~ …Oe ~ b ~ _cdO‚’a"_„’…–d9…Oƒ ~G¯ … ~ ƒ˜ ~ š9  „ | b
|4™ acš ~f} b | ‡b€-”–—
b3b b"_o‚†„’µ ~ a"šO„†_HZb ~‹D~ bc¡yš9Zb"ƒya |$¯ …Oƒ±&-…Oƒ Ž=~ e0-…O… | aHb ~ ‚†„†Z˜9‚’¡\e | dO…ja | …ˆe | ” } „†‚ ~ b
|
Ž Zb"…O„†…O‡4_š ~ b ~ ³ •I_c„†…Oe ~ acš ~N} b | ‡b"-” W‘AD7 Ž=| bcµ“-_h„†…a ~ …Oƒ ~ ƒK• ™›| b ~B· -” } ‚ ~ „ ™ a"š ~ ” ~ ” | bc¡
a"š9Za Ž -_Z_c_ | eG„›Za ~ ƒ$a | a"š ~H~/·(} „’b ~ ƒ | ˜ ~ eGa„†_h… | a„†”T” ~ ƒ9„†Za ~ ‚’¡–b ~ dO_ ~ ƒ?— Vdia | …\Z… | acš ~ b
} ‚›Za ™›| bc”–•a"š ~]} b | ‡b€-” ”H0¡k˜ ~ š9 D~ ƒO„ ºS~ b ~ …ac‚’¡ | b ~/D~ …–eGb€-_3šK—
4.2.9 When to use const?
¤yš ~ … ~GD~ b¡ | doa"šO„†…iµHZ˜ | dia a"š ~  }O} b |} b"„›Za ~ a°¡ }6~f|4™   Zb"„›Z˜9‚ ~ •i ™›| b"”H-‚ ™ dO…OeGa"„ | … } Zb€-”k®
~ a ~ b0• | b+ ™ dO…OeGa"„ | … u_
b ~ a"dib"…  -‚’d ~ •6„’af„†_‡ | | ƒ } b€-e/a"„†e ~ a | a"šO„†…iµ‹Z˜ | dOa]e | …9_ra3® dZ‚†„ ¯ e0Za"„ | …
Zava"š ~ _"-” ~ a"„†” ~ —k¼ ™ a ~ bh-‚†‚*•K¡ | d½_cš | dO‚†ƒ<µ … |UŽ¶Ž š9Zaf¡ | d Ž -…afa | ƒ |¥Ž „’a"š‘acš ~¹ Zbc„›Z˜9‚ ~ •
} Zb€-” ~ a ~ b0• | b8b ~ acdObc…  -‚†d ~ ±*„ ™ ¡ | dHƒ | … a0•a"šO„†_ } Zb€-‡b€ } šT„’_ ~GD~ …{” | b ~ „†” }S| bca€-…ja ³ •_ | ¡ | d
-‚†_ | µ … |mŽŽ š ~ a"š ~ ba"š ~]} b | ‡b€-” … ~F~ ƒO_a | e€šZ…9‡ ~ „’a"_  -‚†d ~ Za_ | ” ~]}S| „†…a0—
¨š ~ ˜gZ_c„†eb"dO‚ ~ a |k™›| ‚†‚ |UŽ „’_a"šO„†_G¬
_ ~ e | …O_3a a¢¡ 6
_ š …
b a"šO„†_„’_ S
} | c_ _c„’˜9‚ ~ - …Oƒ”HZµ ~ _ƒ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 ~ acšZ…\a"š ~¥} b | ”T„†_ ~o|4™ e | …O_3a€-…ja  -‚†d ~ a"š9Za¹ƒO„†_3a"„’…9‡4dO„†_3š ~ _a"š ~ a¢¡ }6~
¬ Ž šO„†‚ ~kŽ=~ … ~F~ ƒŒ‚  -‚†d ~ _+a | „†…O„’ac„›-‚†„ ~ -…OƒŒ-_c_c„’‡4…$a |z| ˜ ~ eGa"_ |4™ a¢¡ }6~
™b | ” const
„’_ } b ~F™›~ b"Z˜9‚ ~ a |
•gb  -‚†d ~ __cd e ~™›| b
—¤ ~ š9 D~ Z‚†_ | Zb"‡4d ~ ƒ–a"š9Za
const
const
„’…¥”H-…j¡H_c„’a"d9Za"„ | …9_G•(_c„†” } ‚’¡ ™›| b ~ eF„ ~ …OeG¡ob ~ -_ | …9_G— | de0-…O… | a„†‡4… | b ~ a"š ~ _ ~+™ ZeGa"_F• ~GD~ …
„ ™ ¡ | dƒ | … ae0Zb ~ Z˜ | dia=a"š ~f} b | ”T„†_ ~ ” ~ e€šZ…9„’_c” | a"š ~ b Ž „’_ ~ —
´ ™ „†_]… | afNb ~F™›~ b ~ …Oe ~ a¢¡ }6~ •6a"š ~ …‘acš ~ d ~ _3a"„ | … Ž š ~ acš ~ b
”HZµ ~ _]HƒO„ º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 µ ~ ¡ Ž=| bcƒEb ~ -‚†‚’¡‘”HZµ ~ _v… | ƒO„ ºg~ b ~ …Oe ~
-…Oƒ_cš | dO‚†ƒoa"š ~ b ~F™›| b ~ ˜ ~f| ”T„’aca ~ ƒ?—
´1…Eacš ~ _"Z” ~ _ } „’b"„’aF•§a"š ~
µ ¡
bcƒ „†_a¢¡ } „†eF-‚†‚’¡ | ”T„’aca ~ ƒ ™›| b ™›| b"”H-‚ ™ dO…OeGa"„ | … } U®
const ~ Ž=|
b€-” ~ a ~ b"_
a"š9ZavZb ~ … | ab ~G™›~ b ~ …Oe ~ _G—k´1…za"šO„†__c„’a"d9Zac„ | …?•
„†_h!I2D#vb ~ ƒ9dO…Oƒ9-…aF•Sa"š | d9‡4š?¬
„ ™
const
 ™›| b"”HZ‚ } Zb"-” ~ a ~ b+„†_ |4™ e | …9_ra3®1a¢¡ }S~ • Ž=~k} b | ”T„†_ ~ … | a+a | dO_ ~ a"š ~N™›| b"”H-‚ } Zb€-” ~ a ~ bZ_h
” | ƒO„ ¯ Z˜9‚ ~ ‚ | eF-‚  Ub"„›Z˜9‚ ~ — Vdiaa"šO„†_ } b | ”T„†_ ~ „†_… ~ „’a"š ~ b… ~ e ~ _c_"Zbc¡Ea |z} b ~GD~ …aN-eFeF„’ƒ ~ …a€-‚
” | ƒO„ ¯ e0Ua"„ | … |4™ a"š ~ e0-‚†‚ } Zb€-” ~ a ~ bv±1e0-‚†‚?˜ ¡  -‚’d ~ -‚’b ~ -ƒi¡{a€Uµ ~ _e0Zb ~+|4™ a"šO„†_ ³ •9… | bƒ | ~ _
„£a
„†… « d ~ …Oe ~ a"š ~]| dOac_c„†ƒ ~ ˜ ~ š9  „ | b |4™ a"š ~]™ d9…OeGac„ | …{„’…¥-…j¡ Ž F¡D—´1… ™ -eGa0•i„ ™ ¡ | d Ž b"„’a ~
™ dO…9e/a"„ | …O_
™›| bH<‚’„’˜Ob€Zbc¡y±1_ ~G~  ~ eGa"„ | … (—’²— D³ •¡ | d ˜ ~ aca ~ bkb ~F™ b€-„’… ™ b | ” _cdOe€šye | …9_ra3®1a¢¡ }S~ dO_"-‡ ~ •-_N„£a
dO…O… ~ e ~ _c_"Ub"„†‚’¡¹b ~ _3acbc„†eGa"_8¡ | d?¬„ ™ ¡ | d{‚†Za ~ b ƒ ~ eG„†ƒ ~ a | eBš9-…O‡ ~ a"š ~™ dO…OeGa"„ | …Hƒ ~G¯ …O„’a"„ | …?•D¡ | d¥Ub ~
e | ”T”T„’a3a ~ ƒ¹a | a"š ~ e | …O_3a3®*a°¡ }6~
} Zb€-” ~ a ~ b
± ~GD~ …o„ ™ a"šO„†_a"dib"…O_ | dia8a | ˜ ~ „†” } b€-eGa"„’e0-‚ ³ •-d9…O‚ ~ _c_
¡ | d–-‚’_ | e€š9-…O‡ ~ acš ~ š ~ -ƒ ~ b ¯ ‚ ~ acšUae | …a€-„’…9_ a"š ~f™ dO…9e/a"„ | …ƒ ~ eF‚†Zb€Za"„ | …K—
¼
‚†_ | •9… | a-‚’‚  Zb"„†Z˜9‚ ~ _=a"š9Za
e | dO‚†ƒ{˜ ~ ƒ ~ eF‚›Ub ~ ƒ
„’…– } b | ‡b€Z”À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"š ~
ƒ ~ eF‚›Ub€Za"„ | …?—¼_ -… ~/· Z” } ‚ ~ •e | …9_3„†ƒ ~ b ‚†„†… ~ h„†… b | ‡b"-” (¬I„’a'1) }S| _c_c„’˜9‚ ~ a | ƒ ~ eF‚›Zb ~ a"š ~
 Zb"„›Z˜9‚ ~ t -_¦˜ ~ „†…O‡ |4™ e | …O_3a3®1a¢¡ }6~ const rational •D˜9dOa¦„’aƒ | ~ _3… a¦”HZµ ~ fƒO„ ºg~ b ~ …Oe ~ •j_c„†…Oe ~
a"šO„†_  Zb"„›Z˜9‚ ~]| eFeFdib"_ | …Oe ~f| …O‚’¡{ ™ a ~ b Ž Zb"ƒO_F•O-…Oƒ¥a"šO„†_ | eFeFdib ~ …Oe ~ „†_ °dO_3aa"šib ~F~ ‚†„†… ~ _ ˜ ~ ‚ |mŽ —
| b e | …OeGb ~ a ~ … ~ _c_F•(‚ ~ a8dO_8_3ac„ } d9‚†Za ~ a"š9Za   Ub"„›Z˜9‚ ~ a"š9Za8„’_V” ~ -…jaa | š9 D~ e | …O_3a€-…ja  -‚†d ~
_cš | dO‚†ƒ¥ƒ ~G¯ …O„’a ~ ‚’¡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‚†ƒ<—F—F—
Dispositional.
² ³ dO…9ƒ ~ bc_3a€-…Oƒ¥a"š ~ -‚†„›Z_ e | …Oe ~G} a˜ ~ š9„’…9ƒob ~F™›~ b ~ …Oe ~ a¢¡ }6~ _-…Oƒ¥acš ~ ~G™›~ b ~ …Oe ~ ]
dO„†ƒ ~ ‚†„†… ~ ¸
” -…ac„†eF_ ™›| b
4³ dO…9ƒ ~ bc_3a€-…Oƒka"š ~ ƒ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€-…Oƒe | …O_3ar®1a¢¡ }6~ _
-…Oƒ{acš ~ œ | …O_3a ]d9„’ƒ ~ ‚†„†… ~ —
´1… } Zbca"„’eFdO‚›Zb0•j¡ | d–_cš | d9‚’ƒ{˜ ~ Z˜9‚ ~ a | —G—0—
Operational.
± ² ³ _ra€Za ~=~/· -eGa } b ~ ®¢-…Oƒ }S| _3a"e | …OƒO„’a"„ | …O_ ™›| b ™ dO…OeGa"„ | …O_¦„†… D
 | ‚  †„ …O‡ ›™ | b"”H-‚ } Zb€Z” ~ 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¸
± ³ ¯ …Oƒo_3¡(…ja€-eGa"„’e0-‚6-…Oƒo_ ~ ”H-…ja"„†e0Z‚ ~ bcb | b"_„’… } b | ‡b"-”T_Va"š9ZaZb ~ O
ƒ d ~ a | †„ ” } b | }6~ bVš9-…(®
ƒO‚†„†…O‡ |4™ b ~G™›~ b ~ …Oe ~ a¢¡ }6~ _F¸
±
³ ¯ …Oƒo_3¡(…ja€-eGa"„’e0-‚6-…Oƒo_ ~ ”H-…ja"„†e0Z‚ ~ bcb | b"_„’… } b | ‡b"-”T_Va"š9ZaZb ~ ƒOd ~ a | „†” } b |}6~ bVš9-…(®
ƒO‚†„†…O‡ |4™ e | …O_3ar®1a¢¡ }6~ _F¸
± 4³ ¯ O
… ƒ‹a"š ~ ƒ ~ eF‚†Zb€Za"„ | 9
… _„†…<T‡4„ 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!SR“24!I,H2"L#&%S,k#17mJ6,0)
=
5
AD!M
5]AD!M lF,F'Q!SR“24!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'*!SRLG: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'*!E724:CHAD!?)/;f,GCY
.
I24C$Aj>*>+./24W‘l0'Q!Aj#1'324!?)L-24:g!MŒ'*!
)rJS24!MD'*!SRvLG:g!I.F#1'324!
foo
Y
l 5R4'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(,yA‘LG:!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)!I24C0W‘Aj>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;%(7–7924:Œ%gADP ,{.0%S2D)Z,F! '*#v24P(,FCN#&%S,¥2D#&%S,FC{24!I,-Y
7924:$W‘AD7‹;AD!?#]#c2:S)-,k#&%S,
LG:!I.0#1'324!
L/CF24W I,G.0#1'r24! Y 5=W<2-MD'ut,/ML-24CfJSADCGADW¥s
Hint:
gcd
,0#c,FCm)o2"L#17UJ6,
%S24;ŸMO2,F)¹#&%('*)W‘2-MD' t.BAj#1'324!\> 22DŠ{>w'*Š , Y
± 4³ ± 4³
int CF24P-'rMO,{A‘MO,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> MCF,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!?>q7“MD'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:W‘lG,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! W‘AD!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!M‘AD! 24:S#’J?:g#f2FJS,FCGAj#c24CY
[<C0'1#c,hAJ?CF2GR4C/ADW #c2¹#c,F)F#¦7924:gC!6:W‘lG,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,GCAj>*>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;],FC2"L ˆ[“%gAj#I'1)
5#&%S,It6LG#1'3,0#&
% V'°lF24!AO./.F'
3
F50
!6:gWzlF,FC05f,0#c.-Y