h
f
g
e
d
c
b
.
J
<
=
// the new type rational
struct rational {
// Program : userational. C
// Add two rational numbers .
# include < iostream >
:6
E 8
9
8
6
H E
<
I
8
T
J
C
J
8
-
8
9
<
8;
.
6
9\
9.
8
9M ;=
C
C9
.
>9
/
6
?/
.
-
8
9.
8
<
-
8
9
:;
09
;
:8
/8
/?
?9
?6
8
-
0- =
.
8
8
<
H
=
-
.
>[
M.
7
8
E -
J=
?> . =
]8
>6
-
9
M.
7
8
-
>
>? =
;
<
;
J=
E 8
;\=
6\
6
.
=
;\=
<
I
>6
1.
8
8
8
A
=
9;
=
M.
.=
E Y
.= E
1
>6
>
0
X
.
B
<
J
.=
J
>? =
9;
8
8
/9
8
B9 .
-
8
9.
1
M.
7 E Z
C9
8
[
^< 9
. 8
.
J D 9;
8
M ; C8 J
I B
6
9.
B ;;
=
B8
6
1
9;
>? = 0
6
M.
7
; D 7
<
=
8
8
\;=
1
8
<
8
8
6
I ?6 . > W
1
8
6
<
< 8.
8
MH
X 9
I
=
/6
.
KL
L :
9
09
<
;
>? <= M7 . 8
/
8
B
>?
.
. 9
J
6/
9. 8
"
9. 1
= >9
&
>6
=
9; 8H -.
1
8
.=
CJ
/9
>? . =
-
8
]8
8
-
8
1.
8
8
R
9.
J
.
H
J
.
J
I
T
=
-
B
1
78
1
>6
-
6
8
/8
C
>0
UV<=
J
.
O
H
J
9;
1
9.
>9
<
>?6
H
P
6
-
=
J=
<
Q
J
9;
-
-
>9
.
?.
6
8.
8;
= D /8
>=
/8
H
9
>0 ;
>6
6
/I
9.
8.
-
8
/6
6;
8
MC
S>6
C
9.
C8
C
9. E .
=
1
9
>;
6
.
9.
C8
C
<
>=
/
=
6
.
.
;
J=
H
1
6
.
J
-
<=
H
=
I
>= D
1.
-.
9
-
9
/8
C
9
>0 ;
>6
J
=
.=
9.
/8
6
>6
78
/8
7
/
0
.
> ;=
B8
8
>=
H
><
6.
0
B-
0
8
-
6
-
8
6
-
8
09
6
.
M.
7
8
:
B
;
MH
M;
7
H
=
I
I
C- =
/8
C
<
;
9;
>6
>0
.
9.
/9
>8
/
78
/
/
01
6
6
01
8N
<
J
9.
-
7
.
J
H
=
I
I
6
.
.
/
:8 ;
8
E -
0
>8
C8
;
=
C=
6
8
:9
8
B6
-
D /8
C
9
>0 ;
>6
/
/6
.
9;
M.
7
8
>8
C9
>
09
8
:9
D
B
9.
/6
/8
C
>0
8
.
6.
8
/8
J
J
H
J
.
<
J
<
>=
9.
/6
C6
>8
8
>9
-
6
A
2
6
D C9
/
?/
7
9
>=
#
)
"!
8
.
.
"
#
-
06
>9
B8
B8
7
7
0
8 F
E =
> = DEG8
?.
>0
8
/8
C
EGH
/8
KL
L
6
I
.
<
J
6
8
8
I
>
/6
C
6.
/9
d
1
8
/6
7
J
>? =
.
.
N=
D J
=
B
\
=
1
I
6
01
-
BJ
6
BJ
6
-
-
-Z
/8
H
0
d
B9
a
B
.
<
8
>W
/6
-
78
1
>6
1
/8 _
:8
/8
9;
6
L
C
>0
n
-
8
/8
L
KL
M.
7
8
>=
B
>9
9-
9;
M.
7
8
=
.=
KL
n
1
6
8
1
8
<
8
/- =
8
7<
8
/9
1
9.
J
1
8
<= D
>6
/8 _ B
>8
. 8
>=
M.
/.
7
8
06
<
>= 1
. 8
6
.
J
>6
8
1
8
>
6
:
09
1
; 78
.
8
6
6
I I
9
#
>
B
8
E M.
7
`
E 8
/0- .
I
n/d
B.
6
9.
6
Compound Types
C8
C
+
;
!
&
' "
"
$
@
( %
!!
" !
5
"!
+ 4
$
3
"
$!
$
"
$
)
"
$
"
9
>? <=
6
:6
/8
/6
9.
/8
76
Chapter 4
78
-.
/W
-.
$
,
&
&
&
2
"
"
"
"
$
#
(
.
"#
-
1
/0- .
+
(
* &
)
#%
$
( '
#
#
%
$
# "#
!
!!
4.1 Structs
int
// 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" ;
$ #!
#
!
"
^ 3
^
.
=
=
C
1
-.
.
.
J
8
>?9
/8
^
.
^
struct
-
.
J
8
-
6
>? [
.
=
;
I
8
.
.
H
8
4.1.1 Struct definitions.
9
-
>8
.
.
.
<
I
9
.
.
<
<
1.
I
=
I
return 0;
01
D
9
.=
<
6
E
<
=
J
=
/8 =
.
8
<
>=
.
.
.
6
9
8
1
-
J=
9
9.
6
O
.
J
<
.
/J
8
87
M<
I
B
7
08
8
<
C6
.
0-
6
C9
/
?/
7
>9
1
.J
I
=
=
E
.
J
I
.
[
08 J
>
>6
9.
I
=
0- =
.
8
/6
=
=
8
6
7-
-
>9
>6
.
.
=
1
M I=
B
/.
9.
>=
C<
9
:=
/8 E
-=
M.
M
a
?9 ;
6
>9
>9
-
8
/8
>
8
6
\;= E
=
1
>6
>
08
J
I
.=
.
8
>=
M.
7
8
B
/
0
>6
-
>6
9.
/8
76
-
-
8
1
9
/8
C8
C8
8
8
.
H
H
J
9.
1
=
=
.
7
.
.
>8
C8
.
;
C=
6
>9
B8
.
B =I
>9
/6
C=
>6
7
W
J=
1=
8
7-
O
8
B;
6
^
-
8
.
<
=X
H,
1
<
H
-
8
C9
>8
.
>9
<
J
J
.
/J
0
?6
8
-
-
8
1
1
9
8
>9
9.
.
J
6
I
M.
7
8
1.
8
6
6
B Z
.
MH
8
>8
/
78
/-
n
C9
/
/?
6
7I
8
=
-
8
>8
/
78
/-
>8
0-
9
BJ
6
D ;W
W 8
1
9.
.
=
J
>6
M8
0>
C
?
>8
>9
8
C9
>
J
C
9;
= D H
M . /8
>6
>
9
B ;;
6
0-
>9
>8
0-
MS
-
-
8
1
8
8
/9
>
9.
/9
.
int
0-
>9
H
;
<
Z
<
>W
8
.
J
8
M .P
7
8
Q
6
8
d
c
c
>9
6
.
J
I
+
M
-
9
/8
C
Q
J
P
H
9
>0 ;
>6
9.
/8
8.
/1
1
>6
>9
=
Z
E =X
E 8
8
>8
2
.
J
9
;
01
9
M.
7
8
B
M
9.
.
8
1
M =I
7-
J
I
D
8
C9
>8
.
<;
<
J
=
> ;=
8
-
8
C6
B8
O
h
c
f
c
.
9
>.
8
.
-
8
9
M.
D 7
8
>
/6
:
/9
B
6
8
9
/9
J
H
J
-
>6
B
6
8
.
9.
/9
>
<
H;
\
1;
8
8
9
/9
B 9-
:
=
=
H;
J
H;
=
I
=
$
6
I
<
8
>W
8
9
> ;=
8
?.
6
8
.
J
/8
/
9;
;
0I
6
6
D >=
J
. C8
> E
8=
*
.
J 9
/8 D . J D
/8
:9
9
7.
.
9.
>W
8
E <
0
.
H
<
8
>8
8
8
:9
M.
7
8
6
c
:
8
-
8
<
<
-
8
9
/9
>9
6
.
.
<;
<
J
8
;\=
8
> ;=
8
;
6
6\
C
B8
J
9;
.
0J
?6
=
6
I
M.
7
8
<
H;
=
>W
8
6
int
?/ X
8
9; -=
M; /.
9.
B J D >6 =
6
0
1
7
J
E
>?9
M
8
/6
>?6
D 8
9
( ;=
/8
6
8
I
b
d
e
c
d
c
c
c
b
c
c
b
E
b
O
<
J
>6
=
.=
8
>W
8
>? =
>
>=
?H
8
&
1
8
I
=
8
.
J
.J
/I
C6
>6
/?
I
-=
>6
0
<
=
-=
H;
-
6
78
>6
6
/.
8
?- )
8.
A struct defines a type, not variables.
6
B ;;
6
E -
.
M<
0-
E 1
D
6
c
d
d
9-
-
6\
&
d
d
n
6
>6
e
d
b
h
b
f
b
e
b
D
8
.
;
=
I
8
M.
7
8
O
=
/
9-
6
8
.
<
8
/8 I
/-
J
/8
9
M. #
7
8 D >9
>9
/<
<
08
.
=
.
/
>
1
>9
M.
7
H
08
8
>=
0
I 8<
>
;\=
1
.= 8
>6
>9
M
;\=
6
.
8
J
/8
M.
E
7
^8
8.
C9
/9
7
9-
/9
7
79
M9
C
8
]8
C9
7
/6
rational
.=
$#
f
d
rational
int
<
8
>W
1
9
/0 .
9;
>8
/
D 8
J
"
"#
J
=
}
1
B
<
.
+ "!
"
h
d
// output
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < " .\ n ";
0/
8
9-
8
8
-
8
;
d
12
;
8
C9
8
>?9
/
#
(
$#
d
// computation
rational t = add (r , s );
0/
8.
:9
09
/
7
8
M.
7
>8
B
J
d
std :: cout < < " Rational number s :\ n";
rational s;
std :: cout < < " numerator =?
" ; std :: cin > > s.n ;
std :: cout < < " denominator =? " ; std :: cin > > s.d ;
.
;
=
>=
.
/8
8
/8
B8
8
09
:
>W
8
>9
-
<
8
6
8
8
M.
7
B8
d
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 ;
2
int\{0}
J
6; D
<
6
9-
J
.
9.
:8
09
/
76
/
7
79
8
>
1
<
8
>W
8
9
B
I
1.
6
D 9
B8
/
0
>[
M.
7
8
E -
6
e
d
b
c
b
b
E
:
=
>6
^
6
.
.
.
<
J
J
C8
.
J
B6 I
/
=
>? . =
M9
1
>6
1
8
8
8
-
-
>6
>
.=
A
.=
E '
:
I
<=
.=
6
0I
>6
7<
6
.
1
>6
78
/
U8
>9
.
=
C
9;
/6
I
>=
>9
8
/9
>9
/9
>=
Y
< ED Y
0<
6
B/
>9
D 8
( <=
/9
>9
-
6
>8
/9
M8
C9
/
/?
78
.
.=
I
>8
<
?> . =
>8
C
1
06
6
M9
B
>6
1
8
-=
H;
-
6
78
>6
-
&\=
Z
X
b
g
b
// 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 ;
}
E
EE
.
<
. ==
9.
>6
=
I
>[
]W
KL
8
>0 < D L
C
9
H /8
0/ .
9
6
rational
(n, d)
>? . =
/9
>8
C6
9
1
9
9;
>6
"
'
C
/6
I
>=
J
<
"#
B
1.
06
/
J
D
7
>9
8
.=
J
<
J
K
J
.
.
;
.
-=
/9
8
-
8
>?9
/8
09
>=
9.
B/6
C6
>9
>8
.
M.
7
8
I
/6
MH
>8
6
:
};
1
0/
.
-
>9
/9
>=
J
J
8
>= D
<=
1
9.
8
<
MH
:
1
>9
A
.
/=
C8
08
/8
6.
=
> A=
>8
1
.
8
.
J
/8 E
8
=
>-
0
n/d
int int
!
8
E 0
8
7-
8
1
M =I
B
d=0
=
:I
09
;
6
-
>6
> H=
9.
9;
;
?;
8
9;
1
C6
I
Program 30:
/6
B
int n;
int d ; // INV : d != 0
// INV:
add
struct rational {
int n ;
int d ; // INV : d != 0
};
int n ;
int d ; // INV : d != 0
add
.=
J
%
'
7
8
J
M9
H;
7
J
.
W
=
I
E Z
1
1=
8
7-
/6
] <=
>8
7`
8
.
>=
X
9-
8
-
-
8
1
1
9
8
1
>9
8
09
<
H
;
D
-
=
8
.
:J
09
;
B
M.
7
8
6
>6
=
I
-=
-
8
]8
7
/
>9
>8
.
J
U
8
.
1
>8
>6
7
C6
D
E
D
E
. DE
J
. E
J
.
8
;
-
W
=
=
>=
8
1
C6
<
J
J
J
<
.=
.
1
0/
.
1
0/
.
/8
>8
8
8
/8
B-
8
/8
>9
Z
>
=
:
.
;
J
H
<
J
J
=
I
8
.
J
>=
-
8
09
8
-
/8
C8
C9
.
.
.
9.
8
6
-
-
8
1
1
9
8
-
1.
0/- .
9
6
9;
=
M.
>6
1.
X
8
0Z
I
ti
8
-
8
.
=
O
2
J
1
0/
7
=
-=
H;
1.
=
I
>
6
.
.
J
=
J
C
6
.
.
<
-.
6
9;
-
>9
>9
/6
7
6
O
.
C=
C
8
]8
E .
>
;
>9 =
8
]8
7
9
B.
B
-
>6
9;
=
M.
>6
>
0
X
7
>
K
J
J
<
<
=
I
1
9-
8
H
=
6
/8 _
C6
.=
M.
7
8
-
M;
>? =
/8
0- .
6
1.
06
/
.
.
.
=
-=
>9
8
/9
8
>9
8
/6
C-
1.
/0 .
`
Q
=
I
>9
1
/
<
=
I
D
D
1
/
1
8
.
;\=
H
.
J
8
-
D 9
1
9;
>6
9.
/8
=
>=
0
J
<
1;
E
.
=
J
$
)
$ !
8
:9
6
9=
<
.
-
-
1
/0 .
6
D I
.
J
8
>6
9.
/9
8
9
>8
8
-
=
;=
M;
9>6
/8
7
1
C6
.
.
9.
=
=
I
.
<
J
=
.
8
9-
>?6
9-
.
1
^.
/0 .
-
8
6
>6
J
;
J
I
.=
8
>W
8
/I
C6
H
.
>9 =
9
H;
8
6
M;
>6
-
>6
C
/6
J=
>=
0
7
J
0/- .
6
I
/6
<
>=
/0 .
8
O
J
1 . /8
M . 06 . 1 .
;= D 7
/8
<
8
8
>
8
>W
8
/6
9
=
8
.=
/0 .
< 09
>6
. >I 1
6\
E . -=
1
>
.=
9
B
O
>6
6
J= 8 <
B
1
= /9 ;
.
J
.= 8
9.
J 89
=
C9
I M/6
>6
C
0
.
6
6
>
B 99
]8
. 7; 7
D 8
6
/9
;
;;
C I C9
S>9 =
>9
C8
8
. >= 0<
/8
/6
0
/6
M
/
6
I /8 < 9 ;
M;
08
-/0 .
.
6
>6
/=
/.
1
8
8
.
< M . >9
9
- ; 01 .
MH 7
9.
8
9
>9
>= 8
M ;;
. :9
>
6
6
H, C
/9
8
8
= 8
1 . 19
<
9
H; J> =
.
6
8
I
J
< 8
. 8
J >?9 ; 81
<
8
; 8
0
/9
>W
0/- . ?
9.
. ==
D 9
=
1
>6
>6
E . 8
C6
1
8
.
D
8
>?9
1
8
.
.
.
8
M.
7
8
6
>9
:9
/9
B
J
=
I
=
-
8
8
a
J
H
<
[
S;
8
]8
C9
7
>9
-
8
/8
E 8
.
6.
C9
>
8
8
I
=
.
8
>?9
/8
:J
09
;
B
B
/6
8
-
9
>6
.
9.
/9
C
.
<
J
J
J
1;
8
1
9
/0 .
8
/8
I
=
8
6
8
>?9
/8
09
.
;
J
=
.
1
.
8
.
=
I
;
;=
=
8
M.
7
8
-
.
J
S1 =
.
.
C
8.
C9
/9
7
1.
>6
>
9
0;
/6
9
9-
/6
-
.
&
=
I
I
D "
"#
;
J
!
.
9;
6
-
8
76
1
-
8
6
I
.
J
H
A
/9
;=
8
C- =
:9
8
-
1
/0 .
;
8
E Z
]8
C9
7
/6
=
I
I
9.
D >6 =
<
1;
8
/9
/8
M.
7
= D
>6
8
>
.
.
J
J
08 J
-
1
I
.=
.
=
.=
9\
-
]8
7
C
08
D >6
9
/0 .
6
8
76
1
-
8
8
S/8
-
>6
>
06
<
J
8
>W
8
6;
B;
6
/I
C6
I D . E
J DE
8 E
M.
7
8
:
-
I
J
.=
`
.;
0J
?6
/?
.
.
.
O
J
J
J
I
=
I
.
H
J
=
8
9
H;
=
8
<
> =X
-
08
1
>9
1
J=
>=
C9
/
6
78
6
:9
/9
B
8
/9
7
-
1.
/0 .
9
6
8
76
1
-
8
;
E -
B;
6
8
1
9
7-
/6
8
1
6;
9I
T
;
.
.
J
T
-=
<
>6
1
8
:8
<
D
7
C9
/8
6
C<
6
01
8
8;
B
.
J
>8
C9
H
<
H
.
M.
7
8
8
8
D :6
9
9H
J
:=
>8
8
8
/8
<
I
U
]8
/6
>W
8
<
M.
7
8
E -
U
06
-
9;
.
.
9;
M.
W
8; D 7
< 8E T 0
F
:6
/8
>
08
8
/8
J
=
.J
B
;
>? =
-.
7
8
P
.
=
M.
7
8
Q
C
?
]
U0
J
8
8
<
H
.
J=
8
-
6
8
>?9
/
09
8
D
C
8
-
O
2
=
8
.
H
1
.
<
J
;
.
8;
8
8
]8
C9
7
/6
.
/0- .
T
W
>=
/8
C8
M9
C
/9
-
06
8
-=
H;
-
6
76
/
[
9;
-
.
9
6
8
09
>9
-
M.
7
8
:
-
D >9
E
;\= E -
<
8;
6
8
E G
C
:=
M8 ;
0 <=
1
8
<
9
H
:6
8
01
6
;
<
9;
.
/8
>
9.
8
:9
EF
:
8
B9 .
J
3
.
J
8
.
D
-
I
.=
8;
-
>9
1
:;
09
;
I
=
8
8
8
8
9
#
" :;
09
;
>9
B<
1
/J
0
?6
#
=
-
#
$
>9
-
1
0/
.
"
#
1
6
70 .
H
E
=
&
%
-
>6
-=
-
8
)
)
.
=
K
06
.
.
/6
-
/8
9.
=
=
"
1
0/
.
/8
H
]8
7
/
8
)
1
tK
/8
J
;
9
>0 ;
>6
C
J
.
.
9.
/8
6
-
8
09
r
76
-
-
8
1
H
J
:
9
I
C8
8
-=
.
6
-
??
1
.
;
>
?--
'
<
9.
C9
7
C6
(t1 , . . . , tN)
9
/8
C8
C8
-
M6
C9
/
6
<
J
.
C8
> ;=
8
;
J=
?/
6
>9
8
.=
t = (t1 , . . . , tN )
8
9
D .
/6
B
/8
76
-
-
-
8
.
8
1
1
:-
:
I
-
J E 1
J
X
8
>9
6;
B;
6
EG-
struct
9
void foo ( S s ) {}
.
N
/8
1
E
U0
.
.
.
I
J=
M.
7
8
=
-
.
;
I
>
struct rational_vector_3 {
rational x;
rational y;
rational z;
};
.
8
I
8
6
/9
78
"
;
CP
8
n=
[
2
09
:9
−u
I
8
J
4
$
#
)
)
.
J
. ==
n=
6
-
C9
8
8
:9
-
>6
<=
/8 _
>8
MS . ;
6
8
>?9
/8
09
}
1
<
-
8
8
:.
09
;
u
.
>W
8
1
/0 .
-
6
/
:
struct extended_int {
// represents u if n == false and -u otherwise
unsigned int u ; // absolute value
bool
n ; // sign bit
};
H
8
a
M;
=
7
J
9-
{−U, −U + 1, . . . , −1, 0, 1, . . . , U − 1, U}
J D /8
J
1
8
O
{0, 1, . . . , U} {
(u, n)
0, 1, . . . , U
int
rational
9.
O
<
/
0
> W E /8
/H
8
9
<
K D 18
:6
>6
-Z
/8
-=
.
<
>9
/8
J
M8
C8
.
J=
<
7
8
M. /. >W
:= 8
8.
=
&
9; 6
I 0 H #
]8
. =
>=
>? . =
-/0 . M7 .
D
M.
8
1
7
: .=
8
>
9
E 8
<
]8
.=
C9
=
7
>
;
B8
6.
7
=
. 6
J B
-=
.
H;
6
8
8
J
8
<
>=
-
6
>8
BI
.
:
>=
.
/8
8
3
> &=
J
struct T {
};
6.
8
I
. ==
1;
>8
>6
B
3
ti
C8
.
struct S {
};
-
1.
.
;
<
>W
8
(t1 , t2 , . . . , tN )
C
int main () {
S s;
T t;
/6
.
unsigned int
/0 .
9;
8
>6
08
8
1
9
78
/
6
M .;
>8
/9
7
79
N
;
J
=
I
O
;
=
I
J=
...
8
>8
.
E M.
7
8
B
6
J
I
6
DEE
E
D
D
8
.
#
)
)
"
8
8
/9
/9
"
>9
8
-
8
3#
8
&
O
;
J
8
.
=
I
Z
>
8
6
8
.
.
J
J
I
=
-
>8
8
-.
8
>9
0
C
C9
>
.
1.
<
H
=
J=
>=
/.
06
<
1
8
<
/0- .
8
M;
B
8
C9
>
-
.=
& D W
/8
J
<
9;
1
8
/9
J
2
<
>? . =
]8
6
-
8
C9
>8
/9
M.
7
8
E
1
0/
.
W
.=
12
0/
.
1
0/
.
-
/8
>8
I
>6
ED Y
E
A
a
1 . D /8
= 8
8
O D
J
8
= EE
< DE
E $
!
(
foo ( s ); // ok
foo ( t ); // error : type mismatch
return 0;
}
struct rational_vector_3 {
rational v [3];
};
4.1.2 Structs and scope
4.1.3 Member access
X
'
1
>6
>
08
.
J
=
U
D
B
1
>6
>
08
add
-
D >6
=
0I
1
J
76
/8
9.
6
E
8
1
-
.
J
<
<
9.
D >6 =
9
0- =
.
0
6
/8
>
01
>8
8
;;=
>=
U
=
9;
.=
=
9
H
<
;
<
=
=
>=
1
>6
8
6
01
>8
C
>
?--
>9
.
9.
>6
=
1
/
7
8
>9
8
>?9
8
09
/
<
<
H
;
.
;
J
0J
?6
>8
C8
7
=
.
J
8
C=
MH
8
D .
/6
D
J
8
.
H
J
<
=
.
9.
-
>6
/8
7
:6
E 8
9
8
-
-
1
0-
>8
C
>
?-
9-
>9
=
H
<
=
<=
<
9.
D >6 =
(=
9;
.=
>=
-
-
1
9
/8
C8
C
.= D 1
8
.
.
9;
1
>9
:6
:
C8
8
1
8
H
9-
8
-
8
<
=
M
I
:
B
7
-
>6
9.
/8
76
=
J
/
.
-
8
-
6
>?9
/
8
09
-
/6
I
.
J=
<
;
I
.=
J
\
;
9;
1
>9
.
1.
C8
>
0- .
9
6
/6
>8
C8
8
C=
.
M;
9
1
GE-8
>
6. D
J 8
>9
/8
>9
D 1
.
>
/6
/0 .
/6
-
/6
9.
/8
76
9;
=
M.
08
:6
/
7
L
KL
8=
.
J
/8
>
D >6
/
>9
<
1
8
8
.
<
08
8
-
/8
H
=
6
P
:=
08
? ;<
0
9;
=
M.
B
UB
C8
C
9
D -
/
7
>=
.
/8
8
/9
-
.
J=
Q
>=
-
8
/
M.
7
8
H
/9 =
-
>- =
1
8
H
6.
7J
8
9
/I
C6
S6
:
J
J
.
0J
6
7
>8
B-
79
8
C9
O
=
1
/
(0,
8
I
.=
J
J
>? =
C9
.
.
H
8
>=
/8
(=
UB
C8
>6
8
7-
M8
>6
0=0
>? =
9.
R
.
.
>? =
>8
6
-
8
.= 9 &
J D .
/8
?8 ; B
8
>9
B8
M .;
J
J
E
.
1.
8
-
J
E
B
<
>8
.
M =I
7
/9 =
-
8
=
J=
BJ
1
>=
"(
#
"!
'
"!
"
)
H
/8
C
>0
08
.
8
M.
7
8
6
<
J
I
E
.
9.
8
01
>6
1
J
<
;
9
" D ;=
M.
B
"!
B8
'
"! 0
6
;
#
<
/8
"(
/
>6
08
6
M- ;
<
J
9;
>6
9.
/8
=
>W
8
.
J
8
C9
8
9.
.
1
6.
-
8
6
8
.
J
.=
J
>6 =
1=
<
B8
>
6
8
.
.
9.
-
C8
/
7
8
O
J
J
H;
J
=
6
.
M.
7
8
/
0
0
<
M;
>6
>9
I
I
=
I
=
U
)
8
-
B/8
C8
C
/8
>
0
H
<
/6
S\
B.
>6
B-
.
=
J=
. E
J
9.
-
BJ
6
M<
/9 ;
8
9
/6
C
/6
1
8
6
S 81
/6
/
0
.
H
<
;
I
=
J
B- =
.
D 9;
M;
D
>9
<
8
8
>8
:9
B
.
J
J
t = (t1 , . . . tN )
>9
<
U
M8
.
J
E 8
-
B/8
C8
C8
/9
7
C6
1
H
=
B-
/6
.
J
\
B
;
I
1
>9
.
.
J
6
/0 .
/6
-
9;
-
/6
9.
/8
6
76
8
-
8
8
8
<
H
I
.
J
M
>8
C9
>
0
:8
/8
/6
<
I
.
9;
M.
7
<
D 8
E
>8
B
.
. B .[
8
6
< 0
>= 6
]8
; 7/
0
<
. 81
J /8 J - =
>6
B9
8
I /6
M9
6
8
I
M.
. -8
7
J C8
9.
8
-
/6
9.
/8
76
8
>?- =
9
D ;=
M.
0
08
/6
.
-.
8
6
8
J
I
J
I
8
09
.
.
8
6
.
:
6
>8
>6
7
C6
1
B X
=
.
J
.
J
8
/W
-.
>? =
=
9
( ;=
.=
9;
.
:9
/
09
>
D 1
.
C=
7
;
C8
=
I
_
I
>=
6
J
J
J
>9
>8
C8
.
9.
-.
/8
H
H
<
J
8
/8
9.
=
>
9
?-=
>8
C
.
8
>6
<
/
9
M ;;
09
>8
0
=
=
.=
9.
>6
1.
8
A
=
>
D 6
8
9
?--
.
-
>9
.
J=
<
<
=
=
E
? . E Y%
9
E Z
>9 =
>[
J
79
.
7
J
8
>8
>
-C
]8
.
C8
;
D >=
H 8
/8
UB
.
J
= 8
:
EG8
09
;
8
6
I
>6
=
(=
-
<
I
.=
9;
J
J
J
;
J
>=
1.
9
0/- .
>[
>6
<
.
.
-=
>6
-
8
]8
7
/
8
6
8
:8
09
J
<
1;
/9
8
8
.
.
M8 ;
>
E
9. D
/9
78
/8
D 66
E
9
C8
C
9.
1
9
8
/6
I
D =
8
E =
F
EG8
UB
C8
C
t
6
>8
C8
<
8
>W
.
.
9.
:8
>8
C
8
=
]8
/
.
9.
J
=
B6
.
1.
8
8
8
-
9
8
.
D
6
8
9
:8
/9
8
]8
C9
7
/6
C9
/
/?
6
.
'
'
H;
J
;
M.
7
8
6
=
B8
:
9
-
<
H
<
J
;
J
I
.
<
1
.
^
M.
7
8
6
8
/9
M8
8
D 9
-
9;
M.
7
8
E -
>8
C9
I
>8
C9
>
0
/6
J
<
I
I
I
=
X
>
-
8
6
>6
9.
<
=
1
.=
6
-
8
09
J
=
.
<
I
=
8
D /8
/6
6
8
B8
.
.
;
<
I
H,
0,
-.
;\=
D C8
:
>
9
?--
1.
M.
7
8
>9
/0 .
6
-
1.
8
6
8
=
9
( ;=
>=
>9
8N
a
6
8
-
6.
;
J
E
.
.
6.
8
>8
0
9-
J
= E
:
/8
C
>0
6
U
)
I
8.
9
8
6
<
H
J
<
8
.
C8
9.
C9
8
-
H
<
J
9
( ;=
=
>=
J
=
B
-
8
(=
9.
.=
9;
.
.
=
I
.=
>8
C8
9.
.
9.
1;
8
:6
.
>[
-.
8
9
/
7
8
>=
.
/8
J
<=
>=
<
0I
9
.;
8
.
B9 .
-
8
J=
.
9.
1
>9
-
J
<
<=
.=
O
=
I
>=
>6
<
H
9
0;
6
70 .
>6
9
8
/
D W
.
.
J
;
9;
>6
.
9.
/8
6
8
09
8
%
=
8
.
.
/9
&
rational t ;
t = add ( r , s );
&
-
7
U0
8
n/d
"
3!
"!
/8
EG>[
8
J
9 ; D >? = 06
/
>6
9.
(=
. ==
9;
(=
. ==
9;
.
9;
8
> W M7 .
8 D 8
< 9
.I 8 <
/8
0I
9
< U .;
80
I >=
9
>
08
/9
/8
C8
C
.
.
9.
8
6
-
8
09
8
6
-
;
U .
>=
.=
J
<
9
( ;=
=
.=
>=
I
=
I
I
> ;=
8
>[
>
0
6
<
;
>8
B8
/
:9
.
.
J
9;
-
6
8
01
t
>=
?.
8
/8
/6
<
<
M
=
8
I
0
.J
6
/?9
?
C
0
8
>8
2/3 = 4/6
rational
(n, d)
9
E
.
J
H
<
H
6
-
1
J
J
=
.=
M.
7
9
B .; E 8
8
8
.
>9
C8
8
.
.
B.
>8
-=
-.
8
B9 .
9.
>6
(=
J=
9;
-
6
.
M;
.=
9;
=
D
>[
.
/8
8
>? . =
BJ
6
Q
<
.
E Z
>8
>6
7
1
C6
-
M9
/
/9
>? =
I
I
=
I
B X
.=
J
.
J
8
8
1
>6
<
Z
8
/6
/8
add (r, s)
8
9.
J
J
'
C6
1
>8
B.
0
-
=
1
>9
BJ
6
=
;;=
BJ
6
B8
>9
B<
extended_int
-.
8
.
/J
0
?6
> ;=
8
9.
D >6
/8
76
8
I
P
<
J
9\
.
A
>9
>=
;
=
6
M9
B9
8
:6
/
7
8
/6
8
/8
-
1.
/0 .
H
.
8
a
t = (t1 , . . . , tN)
K = 1, . . . , N
;\=
H
.
'
BJ
6
>=
C9
6
I
B
/=
>8
08
J
>9
-
8
/8
1.
]8
C9
7
B
J
>=
.
6
9
/0 .
/
M9
8
/9
.
>? =
7
79
/
/8
E -
C8
/9
/
M9
C
==
B8
/8
C
=
t := r + s
-
8Z
>0
9;
>6
9-
<
/<
9.
1
6
=
/
/?
=
.
0
/
>6
9.
/8
8
76
6
1.
8
7-
9
8
1
-
-
8
6
int int
0
9
.
\;=
<
;
J
I
>
M.
7
8
/-
8
/6
C8
tK = t K
rational
6
8
6
.
H;
;
B
M
E
B
.
MH
>8
C
>
=
What about other operations?
> =X
0
.
8
8
>6
H
.
>9
9
?--
int
?> . =
/
M;
7
C
/6
/8
76
8
9
8
/8
.
-
6
/9
7
0
0=
)
B8
B
8
6
C
J
/8 =
.
Q
?.
>6
1
9
1
n/d
C- =
I
point q = p
B
J
8
6
P\
7
}
(0,
:8
/8
.
-
/9
B
>
M
H,
// 1
// 2
D
I
8
6
<
;
8;
1
/6
C8
C
M.
7
8
-
01
6
1.
8
int main ()
{
point p;
p . coord [0] = 1;
p . coord [1] = 2;
BJ
6
I
.=
8;
-
>9
M
M
>9
1.
/0- .
6
I
struct point {
double coord [2];
};
[
<
>6 = 8
9
.> D M ;;
0
6
>8
.
9.
C8
-
a
b
add (r, s)
return
-
.
BJ
6
C
6
8
1.
H
# include < iostream >
MH
/8
9.
I
0
M.
7
8
-Z
/0- .
9
6
-
/8
C8
E
t=t
-
I
J
9
7;
/9
C9
.
Z E
/
C
\
>- =
1
8
.
J
8
<
9.
9
-
/6
B-
8
rational t = add (r , s );
t
D /8
;
J
C
/6
8
=
C8
C
C
rational
H
6
8
09
8
<
I D >6
9.
9
( ;=
.=
=
>8
/=
C8
J=
4.1.4 Initialization and assignment
B
8
.
:
.
s
J
^
>9
;
J
=
8
>=
H
I
=
O
t.n
>8
H,
r
6
Z
6
-
8
09
8
.
B/8
C8
CX
M9
<
.
. D M/6
J E 8
>= /
>9
. == C6
<
9;
(=
. >=
D J
9.
= 1
8
= >6
. > =X
J
8
6
1
I 1
>6
C6
/.
>= 7
9
;= - .
/8
.
6
1
>9
/9
/
?
0 W M9
/6
8
>9 =
C
point q = p;
std :: cout < < q. coord [0] < < " "
< < q. coord [1] < < "\n" ;
8
B1 .
M
/9
/6
.
X
:
<
/I
C6
8
=
9
( ;=
-
C9
B8
J
08
/
t.d
7
C8
I
=
.=
>=
8
/9
8
.
>[
q
9
6
>6
9.
9
( ;=
.=
1
76
add (r, s)
t
/
C
=
.=
>=
>9
1
>6
I
t
7
E <
8
.
add
1
=
.;
/I
C6
-
-
08
>
0
add
-
I
/6
-
9;
add (r, s)
]8
08
J
.=
.
(n, d)
!=
)
return 0;
4.1.5 User-defined operators
rational t = add (r , s );
=
'
Y
'
"
<
J
J
I
.
=
1
1
>6
>
0
.
.=
I
>9 =
/8
1
9
>=
>9
8
J
J=
9 ; E 9 ;;
;
1
8
.
M.
7
8
6
.
<
<
C
-
8
>6
1
8
0
6
B.
/
8
.
J
1.
-
J
=
;
7
.
<
.
J
<
H
B 9-
-
/6
9.
/8
76
9;
>6
9.
8;
/8
8
8
>8
D /8
B-
C
9
>0 ;
>6
9.
/8
/9
C6
1
6
/8
/6
>[
9
8
8
/8
a
E 8
]8
C9
7
9>9
/6
9.
/8
76
9;
=
M.
.
>=
J
4.1.6 Details
8
E ;;
.
I
=
I
I
// 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;
}
C9
>8
C9
8
6
-
/6
9.
/8
76
/6
-
>6
>
9
0;
:8
/8
-
8
/9
/8
[
08
8
-
=
=
>9
=
I
1
.=
6
;=
<
J
M.
7
8
/8
8.
9;
7;
/9
C9
1
8
.
6
.
/I
C6
0
>W
>9
1
/8
C6
7
J
1
-
/
/?
6
78
C9
8
09
>
/
E 8
:
08
/8
9-
.
.
;
J
.
J
8
6
.
.
J
8
.
J
<
<
;
/9
J
I
E
;
M
.
J
P;
.
J
Q
/8
8.
7;
/9
C9
9;
1
8
6
76
1
I
<Z
W
<=
9;
1
6
8
6
8
CX
8
-
08
.
9.
D >6 =
B
>8
C8
C=
7
:
M
>8
B;
6
>? =
.
.
J
J
-
9
.
.
J
H
=
.
>[
E -
/8
8
C9
/9
76
>=
-.
8
9
<
6
BI
.
8
>6
M;
>6
0
D >6 =
/8
/9
> H=
8
9-
8
C9
C9
-
8
I
6;
;
%
I
]8
C9
7
/6
(
"
&
!
#
'
6
8
9-
1
1=
9;
8
9
7-
M;
7
C- =
=
>? <=
9
6
:6
/8
/6
9.
/8
7
B;
6
>? = D ;
8
6;
.
1;
8
6
01
8
8
9;
<
J
9=
;
9
D H
;
B8
:9
1
;
>9
8
I
-
1.
/0 .
8
.
J
:9
>? =
>9
/6
J
1;
8
C9
>9
.=
0J
6
.
/1
8
9
>? . =
S 9-
M
I
.=
.
>=
>6
>
. DC9
J B
8
1
/
D C9
/?
78
.
>=
>6
06
1
M
/9
>
08
9
6
:6
/8
6
-
.
1
>
9.
6
.
9.
/6
/8
76
I
.=
9;
>6
>
0
>=
/6
9-
.
J
=
D >6 =
^
9.
/8
76
J
<
;
9;
>9
8N
M.
7
8
E -
1
7
>
/
/6
8
1
>8
/<
08
.
8
8
1
/
>9
/8
<
9
9. D .
/6
:8
B
/8
-= 8
>6
1
>9
>
6
I 6
.
B .=
1
=. >?9 J
J
/9
8
.
H=
/. 8J
/9
M
76 E
I /8
/6
9.
C
/6
9
)
7; /9
/9
C9 D M . =
8.
76
>9
;
6
9
>? <=
/8
H
1
<
J
=
>6
]8
1
.
.
.
>9 =
/8
1
9
8
<
>=
8
8
>-
8
>6
6
7
;=
J
;
6
8
.
;
J
9;
1
8
.
/I
C6
0
/
0W
?
/8
C6
1
8
.
8.
M;
7
<
<
;
C- =
>9
/
B
6
D >
0
>6
-
9
6
:6
/8
M.
7
B 8J=
/6
8
:8
>8
C
.
/8
8
C9
>[
/9
7
:6
/8
/1
8
>9
8
B.
0
D =
M.
6
1=
9
: .=
-
-
9
8
]8
C9
7
/6
E
>9
-
8
.
9
>9
1
8
B9 .
B
9.
>-
N
<
<
J
J
<
;
9;
M.
7
D
8
-
-
:8
/8
/6
8
=
=
I
I
9=
;
9
H;
:9
D
-
-
.
=
J=
M
B
8
.
.
9.
6
J
J
/6
9.
/8
76
-
=
> H=
/9
>
\
M<
9
8
/9 ;
E
.
J
Q
<
;
P
>8
.
6\
8
9
6
:6
/8
S8
8
8
B
;
0=
6
76
/8
9.
S/6
B-
/9
:.
>8
C8
>
B
;
6.
>? J=
>
8
>=
71 =
/
7
>[
7
C=
.
J
\
.
1
8
-
.
6
>8
.
.
I
J
J
J=
6\
/6
9.
/8
76
8
C9
8
8
-
>9
0
B9 .
-
8
>9
C-
O
8
E ;;
M.
7
8
B 9-
/8
6.
/6
/6
B6
.
9.
8
9
8
8
-
-
/6
/8
-
6
-.
6
76
C
.
9.
O
H;
J
=
I
7
J
"
I
H
;=
;;
J
&
&
!
#
8
1
>9
'
.
-.
08
/6
I
] <=
>8
7`
8
.
>=
X
Z
E -
>6
=
0
?
-
8
9
>?9
8
6
8
L
<
.
KL
=
;
J
=
I
8I
.
09
M8
/
<
J=
H
<
<
9\
S8
:8
1
9
8
8
8
9.
/9
J
>=
>9
1
.
9.
6
1;
8
.
O
9;
>6
>
/
09
>8
.
O
H
J
J
1
=
=
8
C- =
/9
-
>6
J
<
:=
8
.
J
/8 =
M? ;
8
>6
B8
/8
>9
J
<
=
9.
6.
=
=
]W
>
6.
9.
.
J
8
>=
8
-
0<
>9
>6
>
. = E >6
9.
1
/8
76
8
.=
CJ
/9
9-
/J
8
8
/8
6.
8
8
>9
D ;=
/9
E
C8
B9 .
8
B9
8.
>9
?6 .
/9
7
/8
>
6
01
.
.
Q
9;
=
>
9.
6.
9;
>6
J
=
>6 =
.
=
.
6
:9
6=
0<
I
>
1.
78
.
.
.
/6
9.
/8
76
9.
>9
1.
9
8
-
8
9
J
J
I
(- =
J
E
>
1
0
J
1
I
.=
9;
>6
>
9;
;
>=
1
8
O
H
1
I
.=
9;
>6
>
0
&
>=
" !!
8
6
-
9;
>9
6 . D /8 a
9. 8
7
=
=
.
>6
M ; >6
J
^
8
1
9
>= 1
>9
C6
7C
8
0 H >16
1= 8
/ . >8
9; 0
08 D 9
I
I /.
>
. 8
;
1. / I
= /8 I
.
= 6
>6
<= 79
^
.
7
6
>= 9<
.
8
1
J
. = /9
>9
8
1
I
07
>= 9
79
1.
/
7
7
.
;=
4
J
1 D 69.
9. 8
*
D >6 =
>9
>- = " 76
B J 18
6
= /8
. 9.
:8
C8
D
/8
> = /6
7
=
C- =
/
.
<
>P
09
.
-
>9
r + s
8
>6
-
>8
78
>6
M;
>9
!
J
0W
.
;=
J
J
I
E
8
C8
B-
J
I
B
-
#
&
( ?
6
9!
#
.
Overloading resolution.
'
/8
8
7
C6
1
8
<
;
=
D C9
9;
1
-
-
-
8
1
6
.
rational
/
/6
/6
// POST : returns a * a
extended_int square ( extended_int a );
/
add
9.
.=
<=
<
0- =
9;
/8
>8
// POST : returns a * a
rational square ( rational a );
a
7-
// 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 ;
}
/8
76
>6
9
.
/8
76
<
<
;
I
09
J D . D 8I
8
/6
;
76
B
0
H
/8
8
.
9.
>
J
/6
:9
6.
= 8
>
. 8
6
06
/9
.H
M;
>9 = 8
9
8
. 0<
J
MH 8
0-8
I
%
79
;
7
9
>8
76
>? <=
" ! /8
9.
= . /6
$
. #
:6
6\ "
/8
>8
# U
6
8
8
9
6
1.
>6
>
.
.
J
I
extended_int
+
6
D
J
J
>? =
>? <=
;
06
B8
6
1
>
0
double
8
M.
7
8
M
.
> H=
/9
8
C9
.
:6
/8
9
6
:6
/8
.=
J=
int
/?
=
I
I
>8
<
1
>6
>
0
B
rational t = p * q - r * s;
7
J
6
8
9-
1
O
>W
8
>9
8
6
>? <=
;
rational t = subtract ( multiply (p , q ) , multiply (r , s ));
J=
1.
.
J=
E
9
6
??
>6
>
08
-
8
;
6.
>-
.
>[
E "
9.
D =
> [ >6
operator
1
E
]W
J
rational
9
I
8
.
.
square
/<
78
B;
6
>9
6;
-
9
-
/
78
6
1
>6
>
08
8
-
8
8
I
.
.
.
H
H;
H
=
?
O
H
J
.
=
9.
8
<=
M8 ;
C
H
8
C=
J
J=
I
.W
>.
6.
C-
6
8
>8
8
6
I
>? =
C9
6
:H
0=
6
1 D
>6
-= >=
< 7
/8
/9
.
J 0 .=
1
8
]8
;
/9
7
/
>- =
8
-= 1
8
>6
.
J
>8
^8
0
9
>6
9-
/8
0
6
-
C8
J
.=
.
add
O
E
;
J=
6\
6
-
.
6
1
6
'
;
> ;=
8
8
1
9
78
/
MH
B
>
>9
8
D '
B
C9
/
?/
>[
rational t = r + s ;
rational t = r + s ; // equivalent to rational t = operator + ( r , s );
// 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 );
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
'
'
'
;
6\
H
'
X
6
.
^
0<
1
9;
=
M.
1
1
.
.
.
J
<
U8
9.
J
:=
>8
C
?6 I
9.
6
>6
E
E
E 6
8
9
8
.
H;
H
<
8
6
;
J
1
KL
L
9
6
8
>9
1
-
/6
J
\
I
<
;
H
<
.=
9.
/8
76
>9
-
>6
>
0
.
9.
6
:6
/8
B
>
'
8
E <
.
.
.
M.
7
8
/8
8
C9
/9
7
J
9;
1
8
.
Z
1
^.
/.
0-
.
J
C
.
J
<
8
8
/9
J
I
I
-
.
.
J
<
<
:
.
.
J
9
6
8
>?9
/8
09
=
;
I
.=
<
9;
1
>9
C8
-
>9
9;
1
1.
9
8
M>
>8
8
<=
/8 _
>8
1
8
H
B8
.
8
>9
/8
>
0Z
.
8.
/8
9
7;
/9
C9
/6
8
>9
8.
/8
7;
/9
C9
9;
1
8
J
6
\
.
J
I
B;
6
>? =
6;
8
>=
J=
/?
-
8
9.
8
?9
?6
.
<=
M.
7
^8
8
/8 _
>8
.
M.
7
8
>=
.
6
>6
>8
9;
E
E
;
E <
0J
6
-
7-
.
.`
<
8
-
:8
/8
B
-
:=
>8
?8
/6
.
08 H
Z
D
B6
.
8.
/8
H
/I
C6
>?6 =
6
D >=
.
M
0
6
>9
1
-
1.
/0- .
BJ
6
B
>
Y
;
D 8
;
?-
:8
9;
=
M.
0
<
J
;
1
8
1.
/8
8.
9
7;
/9
C9
C
/6
J
<
<
.
8
D .
/8
=
=
I
<=
J
9;
7;
/9
C9
1
1
9
>9
>6
>
9.
08
I
J
8
.
J
1
>9
1
9
8
/6
>? <=
>6
7-
8
/6
/
-
8
1
9.
8.
/8
M.
7
C8
9;
7;
/9
C9
1
8
.
8;
BJ
6
B
J
B
-
1
/6
.
-.
E
;
J
<
H
6.
6
.
>9
<
J
H
<
/9
U <
1
>6
:
/8
.
8
>9
8
>9
.
=
9.
/8
76
8
>- =
1
8
0
D 6
0
J
<
J
>=
8
/8
8
C6
?H
=
C9
.
J
W
=
>=
<
>=
8
9;
-
8
9.
1
>9
/6
I
I
<=
<
J
9.
]W
>=
>=
-
/6
/8
76
?>- =
9.
<
9;
B;
6
-
>9
-
/6
/8
76
/6
8
] W >- =
>
6. E >8
.= 9 .
O
=
J=
>6
>6
E
0- =
>9
O C9
J 08
8
I
7
8
7C;
6=
>
9
1
. >9 =
8
06 I M ;
C6
9
8
0
>
/9
1
-
6
-
;=
9;
0<
8
;
H
/8
7
8
.
9;
H
8
1
<
6
;
=
6=
;
8
<
8
6
7-
0
9;
1
8
9.
>6
B =I
B
1
C6
D
1
;
9
8
1
9
8
7-
C9
>
8
8
]8
C9
7
/6
8
1
9
7-
8
C9
>
.
8
>8
.
.
J
J
J
;
I
>=
=
<
8
>W
8
<
-
I
.=
9;
1
>6
>
0
Z
X
E
E
:
6
8
/8
1
>6
8
/8
/8
0
>
0
8
.
.
>[
<
<
9;
>9
M.
7
8
6
W
=
.
D
J
J
<
=
6
8
.
6.
C6
/
78
1
>9
.
H
.
<
U <
/9
>9
M;
>6
0
<
H
>- =
1
8
6
D >-8
1
-
9
6
;
/W
-.
:6
/8
.
9.
-
8
U8
8
O
J
=
J
;
1=
9;
C6
/0
8
7-
>6
8
I
I
8.
;
-
[
<
<=
I
;=
J
1
9;
7;
/9
C9
8
C6
-
/8
/?9
-
8
9.
1
6
.
-.
8
-
8
9\
-
8
>9
C
C .=
J
8
9.
E -
>9
1
/6
8
1
8
/9
-
-
8
1
9
8
7-
C9
>-
.
=
I
<=
<
<
J
=
J=
>6
M;
8
1
8
7-
C9
>9
-
8
/8
D 9
B
1
1
1
0/
.
E
DEE
1
Z
X
C
<
J
>8
.
?/ I
9
8
6
1
8
.
>[
.
1
D .
SS
1
C
;
.
I
/8
8.
9
7;
/9
C9
C
/6
I
>? <=
>6
7-
8
1
M.
J 7
8
I E 8/6
6
I
W
=
.=
9;
1
>6
>
8
9;
9
0<
0
>[
/
/6
6
8
-.
:
:
8
8
6
8
/8
>6
1
8
>9
1
-
8
09
-
6
.
.
.
9
M.
7
B8
0
8.
/8
C9
C
.
9
6
.
H
J
J
K
;
.
.
<
;
J
<
-
>6
9.
/9
1;
8
>6
1.
0<
8
9
6
:6
/8
6
B8
/8
>
=
=
=
I
-=
<
>6
E 8
]8
C9
7
>9
a
U8
8
8
1
9.
-.
/8
C
>0
C
C0
-
8.
/8
C9
/9
7
9;
J
/8
C
6
/6
H
J
<
I
8
/8
C
>0
.
1
9;
7;
/9
C9
H
;
J
H
;
J
I
I
I
<
<=
.=
>[
< D
>6
9;
/9
7
1
1
9
8
>9
-
D /8
;
=
1
-
8
<
J
8
E 8
9
?--
C
/6
/
/8
>9
>H
=
9.
-.
8
1
9.
9
1
)
"
J
-
I
;
=
.=
.
9;
1
>6
>
08
8
-
9
<
1.
<
-
8
<
>
1
=
=
I
.=
I
<=
K
9;
0;
8
/9
9.
>9
>6
9.
/9
1;
8
>6
>
0
>? J=
C
6
.
<
8
.=
J=
<
8
>W
-
/8
-
6
.
9.
8
C.
8
>6
C
9.
-
H
=
D =
J= >6
1
.
J
J
1
/8
J
>=
>
1
E
1
1
Z
X
<
8
.
.
.
J
9-
/8
.
8.
C9
/9
78
>6
8
9.
;
>=
>9
/8
H
M .;
1
/.
>9
-
8.
C9
/9
7
D /8
.
D
(2 1
J
0
H
D
.
=
. E
C
>9
M
< 9
.
J
J
8
79
7
1
6C
>8
7
.
;=
J
/8
9.
=0
.
J
/8
8
8
B
D 1
C
6
1
DEE
1
0/
.
>W
J
;=
J
D .
.
.
9-
/8
-
=
I
E
1
>6
6
>6
9.
/9
1;
8
8
C6
6
8
76
.
>=
-
9;
1
I
.=
J
J
J
7
C6
8
I
E
1
>6
>
.
.
9.
1
-
1
08
0
0/
.
8
>I
C9
6
=
-
-
8
1
6
9;
8
6
>6
1.
0`
>
M
9
8
-
=
=
I
;
<
=
=
I
=
<=
J
J
H
2
<
;
9;
>=
8
.
.
.
.
.
9.
>9
1
/8
6
>9
>9
/8
"
)
8
9;
1
-
;
.
J
9;
1
/6
C
I
W
=
6
C9
/
?/
>=
I
I
9
1
O
E
/8
8
C9
/9
78
/6
#
;
.
.
<
J
2
!
#
8
9;
1
I
E
8.
C9
8
;\= X
J
<
;
J
<
=
<
<
MH
8
1
J
>=
1
9.
8
9-
6
6
.
-.
9
8
?9-
0
.
9.
-
8
/8
C9
C
.
9.
>6
-
8
1
>=
0
;
C
1
.
9.
8
[
J
J
I
:
B
;
8
8
1
I
=
;=
<
J
.
J
1.
>6
>
0`
6
8
/9
8
/8
O
=
=
I
C .=
8
C6
7
.
;
.=
9.
8
>6
8
/6
/8
-
>6
0-6
/
9
>? <=
6
/8
I E 8
.=
9;
1
/9
=
1
>6
>
0&
4
7
H
=
J
"!
>9
8
-
D .
/8
8.
M;
9;
8
/-
6
.
<
8=
.
J
:9
E Z
8
1
8
>9
.=
;\= X
J
-=
S/8 <
B
1
6
8
8
8
>6
>
I
;
.
/9
7
/8
9
B. E
-
-
8
9-
1
/8
&
9;
1
>6
>
0
4
"!
/6
1. D '
Z
=
>6
>
8
0<
0
>
>9
0
/
7
g
6
>? <=
/6
.
8
7-
;
=
=
/I
C6
>6
6.
C6
/
7
9
-
O
/
0I
6
8
J
8
1\
8
double
9
-
D 1
/0 .
-
/
1
<
/6
8
-
>?9
<
;
/8
09
;
0J
6
0 .=
1
D ;
/9
M
0
6
/9
7
>[
;\=
=
I
8
/I
C6
-
D >6
6.
C6
/
;
J
8
J
8
M.
7
8
6
E 8
/9
/8
O
C8
J
double
g
>6
>6
:=
>8
0
I
>
1.
=
/6
?6 .
9.
/8
76
8
9
6
>? <=
/6
1
9
-
:
.=
J
9;
1
>9
C8
-
8
-
6
1.
B-
<
8
>W
8
/0 .
Z
X
;
J
7
/6
-
8
8
]8
C9
7
-
C6
>8
8
-
8
:9
8N
/8
O
Z
.
.
g
1.
.
=
Y
.
9;
1
8
6
float
:6
/8
<
=
8
-
9;
1
9.
^-
C
.
9;
>8
C9
/I
C6
.
E 8
-
C9
>
B
;
>9
#
.
J
2
8
<
9;
1
-
C
.
9.
1
.
9.
8
8
D .
/8
C9
/9
J
J
J
.
/J
8
78
1
.
.
6
97
I
=
=
g
/0 .
>9
>
>6
8
I
6
0I
-
>6
Z
X
<
=
E
/8
M.
7 E E 8
8
C9
Z
E ;
9;
1
int
-
=
. ==
<
<
8
>W
8
/
:6
7
1.
<
J
J
E -
<
<
J
-=
>6
/8
1
>6
O
6
.
<
/I
C6
>9
9;
/9
7
=
unsigned int
8
>W
8
>9
9.
8
.
/I
C6
:
/9
>9
-.
9
-
8
/8
.
I
1
-
f
-
=
9;
=
M.
>6
-=
>6
/8
6
C
/6
M.
7
E 8
f
C9
:=
>8
0
I
>
1.
?
:
<
>W
8
<
1
>6
8
=
/9
7
I
Z
;=
Dispositional.
/
=
.
<
8
>W
8
<
/8
-
06
8.
-
/8
J
.
J
9;
.
Operational.
/?
.
N
=
? ;;
B8
U
09
-
8
/8
O
8
/8
C
/6
8
6
M.
7
8
.
8.
/8
< C9
>=
. 8.
6
/8
8
9
M.
1
J 7
6. E 8
J
/8
8N
MH
J
:9
-.
8
>9
8
< >8
/9
.
<
J
1
9.
>6
:
9;
/8
0;
I
-=
>
>6
:
1
>6
H
=
double
78
/8
8.
C9
/9
9 ; 7 M.
7
E 8
U
I
.
8
M.
7
8
1
>9
1
8.
C9
/9
7
E
-.
std
f
/
C
/6
8
.
J
.=
CJ
/9
Y
X
Argument-dependent name lookup (Koenig lookup).
std::sqrt(2.0)
B Z
J=
6
M.
7
8
.
Z
float
6
-
.
>=
/8
9.
8
/8
;
int
E
>6
-
C9
/9
7
X
Resolution: Finding the best match.
E
-=
>6
/8
9;
1
bool
M;
:
1
'
X
f
>6
X
add (r, s)
f
f
void foo ( double d );
void foo ( unsigned int u );
float f = 1.0 f ;
foo (f );
int i = 1;
foo (i );
unsigned int
4.1.7 Goals
'
'
'%
'
4.1.8 Exercises
// POST : return value is the difference of a and b
rational operator - ( rational a , rational b );
3
&
( !
"!
'
# &
( !
"!
'
# #
3
#
" &
&
&
"
"# !
"#
"
#
" #
$
#
4
#
" $
#
"!
"
#
"#
!
2
( %
!
!
#
#
+
+
Z
'
X
X
Z
Z
X
Z
Y
X
%
&
$
+ "
2!
( (
%
!
!
&
#
"
&
4
&
"#
&
"
'
#
∨
Exercise 96
rational
#
∧
( // POST : returns x OR y
Tribool operator || ( Tribool x , Tribool y );
4
// POST : return value is the quotient of a and b
// PRE : b != 0
rational operator / ( rational a , rational b );
&
#
$
( !
)
// POST : returns x AND y
Tribool operator && ( Tribool x , Tribool y );
&
"! + @
&
"
" !
// POST : return value is the product of a and b
rational operator * ( rational a , rational b );
$
)
Tribool
#
$ !
#
"!
'
#
"'
%
$
Tribool
"
%
4
Exercise 93
#
@
" !
#
#
@
@
%
" !
" !
%
#
" !
%
@
" !
%
" !
%
// POST : return value is true if and only if a != b
bool operator != ( rational a , rational b );
@
@
@
@
" !
#
I
#
9.
C
/6
8
C6
-
H;
8
9
.
J
.
8
8
/0 .
.
-
.
J
0
6
70 .
J
" !!
)
&
!
7
// POST : return value is true if and only if a > b
bool operator > ( rational a , rational b );
#
" #
$
"
// POST : return value is the sum of a and b
Z_7 operator + ( Z_7 a , Z_7 b );
'
// POST : return value is -a
extended_int operator - ( extended_int a );
2
Z
'
X
Z
X
Z
X
Z
X
#
" #
$
)
"#
"#
2
( %
!
!
// POST : return value is the product 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 sum of a and b
extended_int operator + ( extended_int a , extended_int b );
#
&
"
"
extended_int
int
%
#
(
"
"
#
*
+
$
#
"
%
%
$
#
&
%
"!
#
" #
$
$
"
&
'
$#
!
%
!
$
Z
Y
6
6
0
1
2
3
4
5
%
5
5
6
0
1
2
3
4
&
4
4
4
5
6
0
1
2
3
'
3
3
4
5
6
0
1
2
#
Exercise 95
rational
2
2
3
4
5
6
0
1
1
1
2
3
4
5
6
0
0
0
1
2
3
4
5
6
&
+
0
1
2
3
4
5
6
!
#
" #
$
)
"
#
(
$#
)
"
"
&
)
"#
"#
2
( #
"
(
$
X
Z
extended_int
X
"
x−y
x=y+z
+
#
)
2
"
#
2
4
&
" !
2!
"
" !2
(
( %
!
!
{0, . . . , 6}
&
#
"
z
%
!
!
%
#
&
Exercise 97
extended_int
&
// POST : return value is the difference of a and b
Z_7 operator - ( Z_7 a , Z_7 b );
4
// POST : return value is true if and only if a >= b
bool operator >= ( rational a , rational b );
'
#
2
+
)
"
!
&
+
"
7
"
&
)
#
!
(
# %
"
&
"
)
&
&
/7
// POST : return value is true if and only if a <= b
bool operator <= ( rational a , rational b );
)
$
$ !
Z_7
( $
)
#
( =
#
$
4
"
&
$
#
#
#
9.
.
6
C9
/
/?
79
%
1
Z_7
7
>=
#
#
#
>? . =
@
/
B
M.
7
8
6=
E 8
G
4
Exercise 94
// POST : return value is true if and only if a < b
bool operator < ( rational a , rational b );
J
1
6
MI
0
6
/
8
M.
0
6
/
O
MH
=
" !
#
%
@
%
" !
%
" !
%
∨
%
∧
1.
1
8
8
>?9
.
J
J
E
7
-
9.
>8
79
O
)
J
J
<
J
.
J
I
>6
-=
-
8
8
6
]8
7
/
8
"!
'
:
6
-
8
09
8
O
>9
>
6.
8
/9
<
;
J
I
7
>8
B-
>8
J
J
J
<
=
8
.=
.
6
>=
8
-
:=
09
9
; >8 ;
8 D .
M;
/9
08
8
.
J
9
( ;=
:
.;
;
79
9.
Z
X
E
6
6
8
>
.
.
.
-
=
I
J
H
;
;=
J=
J
J
*
;
9;
1
8
<
8
/- =
8
<
8
8
6
B-
6
.
70 .
0
.
.
9.
8
8
-
M<
/9 ;
8
9
M9
C
0
5/6
operator+= (r, s)
>6
J
I
.
6.
>-
8
6
.
E
I
:8
09
8
/9
08
<
< E Y
B'
E '
>6
A
.=
>? =
.
s
9.
.
6
-
.=
I
D
I
=
>9
1
8
9
J D 8.
08
<
I
>
>9
1.
<
=
>6
.
J
8
/
08
-
6
r
/6
1
>6
H;
r
>
D 6I
.
operator+=
08
.
>8
6
>6
9.
.
;
>9
operator+=
9
>8
-
1
>6
-
/8
8.
C9
<
/I
C6
// 1/3
.
>8
C8
7
H
I
.=
J
C = E 9 ;;
8
:6
1
.
S8
;
rational s ;
s.n = 1; s .d = 3;
1
8
/- =
8
<
<
J
H
= D 76
8
1
/8
8
.
M; 6
J
B
I 8
>=
1
6
< /1
C8
0 E 8
C8
78
H
J
8
.
.
>
08
/9
7
9.
:8
09
// 1/2
78
operator+=
/
9
:6
8
.
>=
.
0
9
8
<
9;
I
rational r ;
r.n = 1; r .d = 2;
>6
7
.
70 .
6
8
MH
C
/6
b
r += s
J
N=
B
/
8
>9
1
8
.=
.
D J
=
B-
.
6
'
S
7
C8
.
.
9.
>9
-
8
/8
E '
C9
/
/?
a
=
/I
C6
M
B
.
.
1
.
/0 .
8
/6
J
;
J
=
<
<
. ==
.
.
9.
/6
/8
76
>8
C
>
?--
9
>6
9
8
>8
C8
7
&
6
C=
.
/.
6
>-
08 .
+=
1
M ; 8.
/8
>
E 8
8
0
A
<
/
7
>9
/
B
=
8
>?- =
1 D
?9 . M ;
B D
8
/6
8
M
<
6
I >6
M.
6
7
.
>
8
EG8
8
<
>9
B
8
>8
;
.
J
<
.=
J
D
1
B8
<
8
8
D
5/6
7
C8
0
9-
=
>=
J
s
a
C- =
8
7
8.
?8
1/2
7;
/9
C9
9;
1
<
.
6
C=
/8
/6
1
>?9
r
^B 8
I
r += s
J
/8 =
.
>8
a
I
#
%
#
+ foo(1, 1)
-=
<
6
B
MJ
"
2
2
&
&
%
"!
( )
)
$ !
$
3
$
"
$
#
&
%
+ )
&4
"
)
"!
!!
(
"
#
$ !
" !!
#
"
"
&
)
"
+ &
!
&
" !
#
(
"
&4
)
"
"
"
(2
)
"
&
#
"
$!
*
%
%
%
%
&
&
" !!
( %
!
!
"
#
" !!
)
%
&
$
3 "#
"
U .
M.
7
8
" !!
"!
'!
K
>6
#
# &
$
"
"
2!
"
*
8
/8 I
>8
1
8
M.
7
8-
"
$
"#
"!
)
#
%
#
"!
'
"(
"#
%
!
+ #
" 2!
)
3
3
2
4
( "
&
"!
'
"
+ !
#
'
$
"
#
"
(
"#
$
"
#
&
&
#
' !
#
# #
#
*
A, B, C
=
>[
2
%
+ $
"
"!
"
#
&
2
#
"(
#
"!
'
)
"
"'
%
"
$
' "(
"
"#
'
( "
%
2
"
"
$!
*
// function A
// function B
// function C
>6
-
;
foo(1.0f, 1.0)
8
B
foo(1, 1u)
>
I
09
foo(1.0, 1)
08
:
foo(1, 1.0f)
J
&
void foo ( double , double )
{ ... }
void foo ( unsigned int , int )
{ ... }
void foo ( float , unsigned int ) { ... }
.
%
%
%
+ # ( %
!
!
#
&
Exercise 98
4.2 Type Variants
foo(1u, 1.0f)
4.2.1 Reference types
rational
rational operator += ( rational a , rational b ) {
a .n = a. n * b.d + a. d * b.n ;
a .d *= b .d;
return a ;
}
r += s;
std :: cout < < r .n < < "/ " < < r. d < < "\ n";
'
E
.
J
I
1.
>6
>
0
=
I
6;
B;
6
>? =
8
6
O
<
H,
M
-
8
0.
-
1.
8
.
;
=
H,
.
J
-=
>
/
08
/8
.
6
/I
8
/8 I
>8
1
8
M.
7
8
.
J
9
B.
>6
-
8
]8
7
/
9.
-
9
.
E 8
:;
09
;
>9
>
/
/<
08
.
>9
=
<
.
=
=
-
-
>8
.
.
=
.
>=
/1
C8
/6
1
>6
>
J
J
I
=
J
8
-=
H;
-
6
7-
1
J
6=
1
1
-
0-
8
J
J
-
8
1
.
J
J
I
I
8
09
>
/
:
/
-
8
09
/6
<
1
8
.=
A
;
B
>
6
E
E
>6
.
9; E
M. E Y
Y
7
'
D
8
>9
0
<
H
A
. 8
1
.=
>6
M ; >6
>8
C9
;
J
J
J
I
/8
8.
J
J
8
/8 I
>8
1
8
M.
7
8
/6
>
6
B.
/
>?- =
MH
0
-
8
-
6
6
1
=
I
J=
8;
-
O
.=
1.
>6
>
08
.
.
/<
08
.
-
>9
8
C-
9.
=
>9
-
8.
/8
/9
8
:;
09
;
:
.
9;
7;
/9
C9
1
-
I 8
> E -
>6
-
/6
9.
8
/8
76
6
8
C6
/6
0
.
.
<
J
6=
1
J
8
-
8
>8
C
<
<
9\
I E 8
.=
.
-=
>6
/8
08
S
:
6
.
9.
/8
76
>8
C
.
9.
-
<
C-
>9
1
8
C8
.
-.
>9
/8
>
>6
1
;
;
8
I
6;
B;
6
>? =
I
=
08 .
8
U8
>=
/1
C8
J
H
J D
]8
C9
7
8
8.
/1
/8
8
.
.
1
>6
`
J
/
7
6
/6
:9
8
8
-
8;
6
1
M .;
C
9
++
6
/9
/6
7
C8
9
9.
J
8
-
>9
/
.
9\
-
8
08
C
0
C
8.
/8
C9
/9
9
-
1
06
Z
X
<
J
8
/9
8.
0
8
E <
1.
8
]8
7
8
/9
-
:;
09
;
8
.
8;
-
8
:;
09
;
=
.
H
9
8
-
1.
;
I
=
>9
.
;
I
=
.
J
I
-
8
2
"!
'
#
#
D =
B8
B/8
J
.=
6.
-
1
>9
C8
3 2
#
# %
#
3
#
X
B< E Z
[
8
I
.
1
J
>9
0
08
I
>
8
1
.
=
B . >6 =
/
J 08
/8
.
/
:8
>
/8
-
>9
D -8
8
:;
09
;
-
=
-=
>6
-
8
9;
]8
7
/
1
>6
>
/8 I
>8
D
1
8
.
J
08
8
/9
8
08
/6
/8
>9
1
8N
.
8
/9
8
1
>9
I
I
H
.=
J
9-
1
1
8
:9
8
B8
B
J
J
J=
D 8
;
;
>=
/8 I
>8
1
8
M.
7
8
9B
1
>6
>
09
M.
7
8
6
>
/
08
/
8
O
J=
8
>9
8
>8
<
-
MJ
9
D H
;
8
>9
B<
/9
=
8
/8 I
>8
1
8
M.
7
:8
/9
8
(=
9;
.
<
;
/
J
=
I
8
/8 I
-
<
/<
8
6
I
.
J
8
6
H,
8
1
.
.=
9
8
.
MH
8
-
8
.=
/
78
/
M.
7
8
6
8
>8
=
9
09
.
6
>=
8
:;
09
;
B
MJ
:
D 9;
M;
>
>[
.
/8
E
I
I
=
=
.
H
J
8
]8
/6
C
=
R
8
6
8
:8
09
8
>?9
1
8
/6
/8
8
.
.
;
J
J
J
I
I
.
:
;
8
>=
.
8
9
<
09
/&
"
-
8
: ;X
09
;
/8
8
.
:
J
.
.
.
1
8
6.
>-
9.
8
09
8
/8
;
J
J
9;
1
8
[
;
7;
/9
C9
-
8
09
;
MH
:
.
9;
1
8
8
9
M ;;
>
8
8
<
.
6
1
J
>?9
9
01
D 9
-
1
9;
7; E
/9
C9
6
-
9-
1;
I
.=
B;
6
9
;
/?9
/8
.
=
8
/8
6
.
.
J
>? J=
8
;
>
8
.
.
J
/
2
6
?--
9
1.
9
+
=
I
8
>=
1
8
`
<
J
H
.
H,
J
=
.=
>=
/8
9I
.
1.
8
6
/8
6.
>9
6
/8 I
8
/6
8
.
6.
>?9
>
8
/8 I
>8
1
8
1
>9
/
=
=
I
O
;
=
=
.
1.
J
=
I
I
=
-
8
>6
0
.=
>=
>6
>
08
.=
E
.
.
J
;
J
.
I
=
<
=
I
>6
9.
=
9
( ;=
.=
>=
/6
8
-
J
9.
0- =
/8
8.
7;
/9
C9
9;
1
8
6
8
:8
09
-
>9
C8
D .=
H 1-
J
MH
/
8
/8 I
>8
1
8
>6
M;
/8
.
8.
C9
9
-
9-
6
-
8
1
/9
7
7
/0
9-
8
9;
8
/8 I ( =
9.
8
=
.
<
D 6
. E >6
6
M H B [I
>- =
1 E .=
8
8
9;
8
1
-
C6
>
9
?--
9.
/8
/8 I
1
8
>8
6 D
I 1
1
B8
8
78
9
:6
8
=
>=
>? . =
/
>[
D 6
<
B8
D H
;
M; 8
E Z >- =
-
>6
8
:;
09
;
6
6
9-
9;
>9
B
;
B
78
.
J
.
.
MH
8
/8
C9
/9
78
-
9-
=
C
8
<
>
.
6.
-
/8
8
C9
/9
7
[
J
9;
/6
.
=
I
I
.=
/8
6
/I
8
9;
1
/8 I
(=
9;
8
; >8
. MH 1
J
8
8
/
M.
I 8 D 7
/6
I/8
C
B8
>8
9; D
1
7
8
8
/9
. :J
9
J
C9
8
8
8. 9
< /8
/ < 3 " !!
^0
8
- 3 2
>
'
< 6I
/8
X " !
/6
1
9
U ;; /9
C8
MH 8
I/8
U
>9
:
>8
09
.
;
S1 =
1
8
8
>
:
09
;
< E 8
=
>=
6
8
-
0-
/8
8.
C9
9;
1
/9
7
8
.
6Z
.
J
MH
/
8
/8 I
>8
1
E 8
J
0
8
/8
.
9
7.
/9
C9
=
.
8
/8
.
8.
C9
/9
78
"
$
B9 .
M9
-
8
J
J
:=
9;
>8
D .
M;
B
E
.
.=
/J
8
78
1.
.
6
.
B 1-
>9
C
J
J
.
.
O
J
I
H,
J
%
;
C
J=
[
.
1.
9
/-
>6
>
09
6
8
/8
J
9
7;
/9
C9
/6
9
.
=
I
I
I
I
J
U8
#
3 2
#
3 " !!
8
:9
8
%
8
/8 I
>8
1
8
M.
7
D
B8
E G
-
BJ
6
-
8
]8
C9
7
6
B ;;
6
>? =
8
8
9.
6
6
1
E .
#
#
8
/8 I
>8
1
8
/8
.
.
9.
-
M9
-
8
=
6
>
I
H,
J
J
:
1
6
8
/8
>6
8
>9
1
-
8
09
:8
-
6
<
6
-
9;
8N
E 8
>6
9.
=
9
( ;=
. ==
.
.
H
;
I
<
. E J
8
O
:;
J
8
09
>
=
;
H
8
> J=
1.
8
6
8
/6
8
C9
.
6.
/8
J
"!
'!
>9
M.
7
"
D 8
6
I
. /6
J
8
: ; M>9
09
; M.
S
7
8
B8
>9
"!
.
9\
>9
C
H;
=
>8
C
>
9
?--
<
=
:
>9
8
>?9
/8
09
;
=
1
;
<
=
%
8
<
>6
M;
/I
C6
9
( ;=
.=
H
8
>=
>9
#
#9
8
9;
1
6
-
9;
Z
X
/
1
.
J
=
$
%
>9
J
/P
8
/8 I
>8
1
8
.
6
P
/
8
/8 I
>8
1
8
Q
/6
9-
/X
8
9
<
>6
9 . E QZ
=
>[
9
( ;=
. ==
J
8
>=
.
>=
<=
/8 _
>8
1
8
=
-
8
O
E 6
=
.=
<
9;
.
1
>8
-
.
M.
D 7
8
M
-
>8
#
#
>? <=
>6
7-
8
/6
8
-
6
. 0<
/I I
C8
>
8
/8 I
1.
>9
=
>8
. = >6
1
8 EG19;
D =
M.
M.
7
8
8
9
:`
/9
>9
int main ()
{
int j = 5;
increment ( j );
std :: cout < < j < < "\ n" ; // outputs 6
B<
.
9
B;
/
D 8
]8
08
.
? .) E I
>6
8
>8
.
H
/8 I
>8
1
8
.
D 6
B
0
6
/I
8
/8 I
>8
1
8
M.
7
8
=
>9
O
;
>9 =
B-
]8
7
-
=
}
D
>9
/8
>
06
8
1
E .
"#
#
$
)
3
78
B
r
>8
?
J
// j becomes an alias of i
// k becomes another alias of i
9.
.
6 D
MH
.
<
r
>[
4.2.2 Call by value and call by reference
:;
09
;
S
8
/8 I
>8
1
8
8
J
-=
>6
// error : j must be an alias of something
// error : the literal 5 has no address
-=
<
/8
8.
C9
/
/8
6.
>9
-
\;=
-
6
/8
=
I
8
1
/.
8
/8 I
/
H,
8
8
-
.
.
>? J= E 6
i
/8 I
.
6
9
;
=
J
9;
/9
7
6
8
9
( ;=
]8
7
/
M
>`
\
)
<
i
8
E 8
a
.
1.
>6
>
08
J
6
/I
8
1
/9
I
9 ; /8
C9
; >8
=
8. 1
8
:8
/8
E
M.
09
; D 7
>[
8
9
. D 8.
.
J
<
J
B- =
8
.
1
D
J /6
M9
8
B
>= /
8
. == 78
9 ; >6
1
(=
>9
>? <=
C = 9.
=
7
>6
1
;
9;
C8
6
I 7;
.
>8
J U9
. 8
I
>8
I
=
.=
>=
E
/6
B.
>6
// changes the value of
// outputs 6
]8
C9
7
>9
-
8
/8
E -
/8
J
1
9;
7;
.
=
C
/6
J
6
.
rr
8.
1
9;
7;
/9
C9
8
6
9-
9;
^B 8
9
9-
>6
=
/8 I
>8
1
8
.
6
.
J
8
8
J
8
/8 I
>8
1
8
/
j = 6;
std :: cout < < i < < "\n" ;
/
I
.
J
/8 =
;
>9
.=
:;
09
;
H
1.
I
/
/8
6.
>9
// j becomes an alias of i
1
void increment ( int & i )
{
++ i;
6
-
8
J
-
8
.
>
09
>8
J
int i = 5;
int & j = i ;
int & k = j ;
9\
8
>9
-
8.
N
int & j ;
int & k = 5;
:8
09
.
C
/8
0
C
/8
C9
/
j = 6
i
8
J
8.
9
7;
/9
C9
I
int i = 5;
int & j = i ;
>6
1
>?9
J
=
C
/6
r
9.
.
1.
I
j
>6
>
0
[
J
=
I
Definition.
}
return 0;
4.2.3 Return by value and return by reference
increment
int & increment ( int & i )
{
return ++ i;
}
Y
2
0
1.
;
I
A
1
8
0.
&
I
9.
P
J
9-
0
.
.
.
8
.
1
.
J
/
/?
6
6
8
M;
1.
<
C
.
E
8
.
<
J
/8
C
H
9
>0 ;
>6
9.
/9
/6
7
C6
/
7
>8
BQ
8
1
8
8
6
C-
>9
C
/9
/8
.
O
J
J
=
6
1
E
6
>9
.
.
B .)
>6
<
.
/8
/8
1
9
1
/9
8
-
.
.
.
J
J
08 J
ED ?8
D >?6
/
B6
>?9
-
/8
9
.
I
=
.
>? J=
M H;
=
I
D
.
/.
9-
>6
>8
6
P
1
>[
H
/
78
`
<
6 D -;
8
B6
E -
/6
9.
/8
76
70
-
J
6
H
=
>=
/
0
9-
/8
C
>0
9;
-
N
I
9.
>6
9\
8
9.
8
1
>8
-
U
]8
8
/8
C8
.
J
J
E
8
]8
C9
7
/6
.
1
/9
;
I
8
<
J
/
1
<
H
=
6
?8
>6
>=
/8
C
9
>0 ;
>6
9.
/9
9
8
>9
8
0O
>=
9.
/6
C6
>8
.
D J
B-
E
<
J
>W
9
M ;;
>9
9
1
D .
>? = /8
/8
>8
MH
B
6
-
08
/8
>
/
08
/6
-
J
.;
.
.
9;
8
I
.=
C
9.
-
9
8
.
<
-.
9
9-
8
-
9-
78
0
C
/8
8.
<
H
.
8
/9
9-
9
8
/6
>9
B8
.
.
B9 .
I E
<
J
>6
M;
.
J
<
-
I
.
J
:
09
.
;
=
6
<
M =I
C6
9-
9
>? . = E 8
/9
78
9
MH
8
6;
B;
6
/8 I
J >8
8
0> D
1
8
C
-= E
>
/8
9. 1
8
/6
.
/I 8J
>=
C6
70
D
.
.
J
8
76
/ . /8
9.
8
D C9
/6
/
J
/W
.
/6
/8
76
8
O
J
9
7;
/9
C9
/6
.
/8
1
9
1
/9
6
6
M.
7
8
B< E
.
<
<
B
Z
X
-
-
9
-
.
.
J
/8
C
H
9
>0 ;
>6
<=
<
=
.=
9.
/8
7
0
C
8
>6
9
>[
>9
.
<
I
X
-
8
.
J
6
.
`
-
<
8
.
C9
/- .
70
.
J
8
>=
>
/
.
/<
08
.
>9
-
9
76
8
8
>8
D >9 =
B
?
I
8
>=
70
/6
8
C9
J
Z
/6
I
6
<=
<
J
.
=
.=
.
.
9.
/8
>? =
>
76
>8
>=
?H
8
>
9
?--
>6
9
8
6
C
.
H
1\
9
J
8
/I
C6
.
8
/8 I E
>8
1
8
/9
-
9
I
7
.
9.
C8
I
9=
;
8
<
8.
]W
0
6
/
6
&
?- )
.
<
8.
/8
/6
>[
>8
C8
.
9.
-.
8
;
>?- =
.
.
.
J
;
-
>8
C8
.
.
.
9.
-
>9
8
.
J
MH
<
6
>=
70
B8
8
1
9
78
/6
std::cin >> r.d;
9
]8
-
C9
M.
7
8 E ''
0- =
8
>8
I
.=
J
.
08
=
;=
)
<
D
-
1
>9
8
=
9
.
1.
/0- .
8
6
I
std::cin >> r.n;
B
D >6
>
main
int
E
I
>=
J
J
=
=
/9
9-
78
1
1
9
A
operator<<
s
9.
1
9
8
-
/8
1
:8
>8
>
>6
.=
0J
1
>6
1
J
01
;
0- =
<
8 D 8
. J= 0
H
B.
8
1.
= B8
>6
B
>6
)
=
.
.
J
<=
09
1
H
08
9
.
.=
J
W C8
8
<
:
J
/8
/8
-= E 8
>6
08 .
&
<
8
B9 ;
>6
1.
8
.
-.
>6
8
>9
B<
D ;=
/9
8
C- =
/9
-
/6
=
1.
>6
>
6
8
B
>
/
0
/6
E
D
>? =
9-
8
6
I
=
6
.
;
8
>6
-
9
8
C9
-
8
.
I
;\=
J=
J
<
>=
0
B8
B
.
J
J
J
8
>=
/6
8
S/8
76
70
.
-.
6
>6
/
>
-
8
/8
O
U
7
-
O
0
.
*
J
I
=
=
=
>
/9
0- =
8
B9
<
>=
8
>9
<
8;
/8 I
>8
1
8
8
8
6
-
>6
9.
6;
8
1
:-
=
;=
J
9
M ;;
>
6.
0
/08
C6
1
8
.
<
]8
7
/=
8
H
8
I
/6
8
.
J
8
9;
=
E 9-
6
>-
8
6
M
0
/
1.
8
6
8
.
.
9.
8
-
>8
1.
D 8
6
>9
/6
9-
N
J
I
=
H,
J
J
H,
9;
>9
8
9.
8
6
/1
0
:8
/8
>8
<
8
>W
8
E <
>
0
.
J
8
/8 I
>8
1
8
/8
J
.;
.
<
/?
std::ostream
.
J
J
=
I
=
M.
<= >9
7
7:;
8
0
= 6
- D -9 D 9 ;
;
8
.
J= >- =
1
1
8
>9
.
J
8
8
0
96
Z M ;=
70 .
9H
.
8
9/
< 76
8
>6
I/8
/8
S
8
9.
B
>8
/6
S1
8
C
8
C- = 6
<=
7
W
M;
8
7
.
9J
8
>9
/.
8
/ < C9
08 E
.
/
>
a
:9
. >? =
J
8
0
/
6
8
70 . /8 I
>8
.
1
/- . 8
M.
8
7
C9
8
B X 9.
J 0
6
6
/
8
-
C9
/
6
78
6
/6
:9
8
H
>? =
-
08
/8
>9
]8
7
/=
8
<
6
H,
D 8
1.
8
/8 I
.
6
>9
/
8
.
.
9.
8
<
8
<
0
8
-
/6
C
J
.
9.
/6
/8
76
.
6
70 .
0
8
.
H
J
<=
J
Y
B'
>6
1.
8
8
:9
8
J
A
=
>=
/6
9.
/8
76
.
8
6
70 .
0
.
>?- =
-
1
0-
>[
E
9. E Y
/8
76
.
8
6
70 .
0
.
MH
>
/
.
/<
08
.
6
8
-
-
9
>9
7
/.
8
C9
J
J
<
. E
6
70 .
0
0
/?9
<<
9;
M.
7
08
1
.
I
J=
J
<
<=
>=
8
-
-
1
0-
-
DE Y
E
9.
/6
/8
76
9;
>6
=
J
08 J D
0
9;
C8
.
.
I
8
>8
std::istream
>8
C9
<
=
.
-=
/8
:-
8
.
.=
J
H
A/B
3.4
>
0Q
1
C6
<
MH
8
1
8
/8
E -
C
9
>0 ;
=
.
9.
/8
76
>8
C
=
=
// 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 ;
}
>9
add (r, s)
B
D /6
C
8
1
>6
'
'
9.
>6
=
>
?--
9
1
8.
:8
0=
6
0-
/
7
1.
8
-
=
. D >6
J B
8
`
>=
a
9
;
6
C9
/
?/
9.
6\
;
/<
8;
9.
>9
1
8.
=
=
=
+=
78
=
I
6
-
J
J
.
CJ
/9
J
J
J=
4.2.4 More user-defined operators
\;=
/
;
9;
1
J
<
.
.
J
.
CJ
/9
8
B/8
/8
6.
O
-
.
int i = 3;
int & j = foo (i );
// j refers to expired object
std :: cout < < j < < "\n" ; // undefined behavior
8
=
>? . =
1.
>6
>
08
.
=
I
I
?O
6
8.
8
8
.=
A
X
8
/6
/
6
;
.
J
H
<
J
J
9;
9.
-
-
8
1
6
>?9
0
0
9
6
6
:6
/8
-
6
6
8
:9
8
<
=
<
;
1
C
/8
I
.
;
.=
9;
1
>6
>
0
M
J
J
J=
=
J
<
1
-
6
6
-
B8
J
J
I
.
J
T
>8
C9
>
/6
<
I
I
I
>9
9;
>6
9.
/9
=
.
9;
M.
7
>< 8
E 6.
`
9
.I
B. /8
D 9
;
:6
B;
09
;
B8
8
/ I >9
.
C6
.
. 6
.
J
8
> J=
\
8.
6
8.
-
8
8
/I
C6
0
=
.
;
:8
09
8
<
>?6 =
8
0,
-.
;\=
.
.
;
8
>8
B8
76
0
>
/0
8.
/8
C9
9;
/9
7
C
/6
/9
H
I
I
>- =
1
8
.
J
8
D H
;
8
/.
0
6
/6
>? =
=
J=
9- \
-
-
O
9
>?- =
9-
/8
C
>0
9
<
/<
8
-
8
.
/I
8
8
<
>9
/6
C8
1=
9.
8
C<
6
-
9-
8
.
.
9.
-
>9
8
C-
O
>=
9.
8
EG-
. E
.
J
B;
M
8
9
8
>6
8
8
:9
I
.=
B9 .
B
C6
/
D :6
8
]8
C9
7
B
B
>8
'
E Z
B [I
E
E
1
>6
8
8
8
-
]8
7
/=
8
-
i
/
S.
>=
-.
8
9
<
B6
>9
/
-
>6
;
J
E
/
/8 I
/9
>8
8 D
/8 I 18
>8
>9
S1
8
<
.
6
H
8
1
C6
7
;=
>9
B.
-
9
increment
>8
:6
C8
9.
>6
/8
76
6
8.
-
0-8
09
8
6
:9
B
;=
1=
M .;
7
Rational numbers: addition assignment.
rational
/
7
9;
C=
.=
MH
>8
<
6.
8
1
9
=
>8
Reference Guideline:
7
78
6.
7-
/
8
C9
>
>6
B
j
>9
8
D .=
;
B;
E
Rational numbers: input and output.
add
operator+
r + s
>
/
8
/
B8
.
J
8)
/<
9.
=
> ;=
8
D '
B
>=
int & foo ( int i)
{
return i ;
}
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < "\n" ;
std :: cout < < " Sum is " < < t < < "\ n";
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational r)
{
return o < < r.n < < " /" < < r .d;
}
std :: cin > > r;
// 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/2
'
2
b
c
b
6
e
f
D 8
-
h
/H
/9
;=
J=
E
M
-
.
>?- =
;=
8
0<
1
7
C6
H
8
>9
1
H
8
B;
6
Y
'
C9
/
/?
6
9.
6
-
.
J
b
]
/8
1=
>=
=
H
.;
0
8
J
:9
M
M
0
6
9.
J
.
/H
/9
;=
9.
J
M.
7
8
>=
.
6
.
J
8
C
H
/8
C
9
>0 ;
>6
9.
8
/
B
>8
.
J
=
b
/
8
9.
>=
?.
8
.
.
9
6
01
6
M0
9
M ;;
b
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b );
b
b
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a );
b
b
c
c
c
c
// 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 );
d
c
f
e
d
c
b
// Program : userational2.C
// Add two rational numbers .
# include < iostream >
# include < IFM / rational .h >
c
+ "!
"
#
(
namespace ifm {
h
h
f
e
d
$#
e
c
b
b
c
d
e
// Program : rational .C
// Define operations on the type rational
# include < IFM / rational .h >
b
f
b
b
std :: cout < < " Rational number s :\ n";
ifm :: rational s ;
std :: cin > > s;
b
}
Program 32:
b
b
b
h
int main ()
{
// input
std :: cout < < " Rational number r :\ n";
ifm :: rational r ;
std :: cin > > r;
b
b
b
// computation and output
std :: cout < < " Sum is " < < r + s < < " .\ n" ;
b
c
return 0;
b
b
c
d
e
f
c
b
b
h
b
namespace ifm {
b
// Program : rational .h
// Define a type for rational numbers , and declare
// operations on it .
# include < iostream >
b
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a)
{
return o < < a .n < < " /" < < a .d;
}
c
c
h
c
f
e
d
c
b
b
b
b
+ "!
"
#
(
Program 31:
$#
b
b
c
}
// 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 ;
}
d
c
e
f
c
h
#
$
c
$
"
#
!
#
$ r + s
!
!
operator+
"
#
!
"
!
"
#
#
#
c
// the new type rational
// 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 . ’/ ’
d
8
1
9
>6
-
8
=
.
>=
.
>6
b
E
/
?/
7-
7
C9
>9 =
C
>6
=
9.
>6
\
/8
76
9-
8
-
C9
.
>9 =
.
J
8
J
1
.
9.
J
<
.
8
>9
1=
/8
]
E -
8
9-
J
1;
8
C9
>8
-=
H;
-
6
b
9.
8
M.
7
8
>
B
/
8
0.
6
708
B8
D
6
:9
.
/8
/6
6=
7<
<
>=
ifm
struct rational {
int n ;
int d ; // INV : d != 0
};
/6
<
;W
76
rational.C
userational2.C
rational
/8
9.
<
;
8
9
6
9
rational
b
. 06
<
>9 =
;
/
. (9 =
^J
8
9
9.
;W 8 < D >6 =
8
>W B
=
.=
8
>6
9
01
6
.
I
. 9
J M ;;
. 8
J 79 . /0 .
;
.=
1
1.
>6
.
J
.
8
7
>9 =
/?
6
. D
/
J
8
C9
< 9
8
> W >?6 ; > =
.
U =
6
. E Y%
J
>6
1
C
>6
>6
:6
/8
>W
D 9;
M;
/8
76
8
C .=
-
8
8
C9
9.
J
.
6
J
-
8
.
>6
.`
E '
.=
1
8
8
/6
^-
6
-
>6
.
J
I
9
/9
9.
<
J
I
.=
B
8
.
1;
=
8
;W
7S8 ;
-
W
8
.
>[
J
I
A
/=
=
.
6
2
.
/J
8
8
=
rational.h
J
/
9-
-
.
J
;
:H
0=
6
-
6
-
-
8
8
>
6
8
J
.
.
0
9
.
0
-
-
-
/8
7
0
0
J D 6
H
<
C-
>9
1
8
8
J
R
=
=
H
.
D .=
1
-
>9
C8
8
U ;
MH
U
:
09
;
9;
1
6
1\
9
H
>?6 =
/?8
7
8
8
=
=
;;
;=
J
>6 =
U .
7
D 9
?--
C
/6
/
/8
>9
8
-
0-
B/8
C6
1
8
.
J
I
=
J=
=
8
;
<
9;
1
/8
>
0-
8
9.
1
8
>6
7
1
6
I
M.
7
8
8
B6
<
>9
8
.
9.
/6
9
1
.
/.
D 9
-
>6
>=
J
H
^
8
8
/6
C
C6
;=
J
J
8;
.
.
9.
/9
-
1.
/0- .
-.
6
MH E /
8
= /8 I
9
>
H; 8
8 D 1
8
:8
/9
H
C8
I
:- =
8
>=
]8
7
>8
H
D
8
>8
.
J
I
=
M
UB
M
1
6
76
1
8
-
/8
C8
C
9
H
=
>=
8
.
J
9.
?
;
C=
>9
0
8
]8
C9
7
J=
E
MB 8
/6
8
8
/8
018
9
-
<
1
>9
C8
E G
\
J
.
J
<
;
.
9\
7-
>
.
9.
76
H
=
.=
M
X
J
/8
76
>6
B
I
=
I
8
.
J
?>- =
6;
B;
D 6
0-
9-
:=
>8
?8 H
>9
1
8
-
C6
/
7
J
8Z
-
.
9;
8
1
8
C6
8.
8
6
J
>8
7
<
>9
/8
9-
.
.
.
J
J
I
=
>- =
1
8
.
J
8
9
.
<
J
=
=
J
09
;;=
;
.
>9 =
/8
1
9.
B8
:
.
O
) $#
6
-
9
8
8
7
/
:8
0=
6
]8
C9
7
;
EG8
<
U ; >
MH 6
U/
.
H
8
8
/8 I 1
>8
J
>?9
1
:8 D 8
<
/8
- = >9
>6
9;
1
8
.
E 8
>[
C6
/
7
J
J
8\
78
/
J
;=
J
;
J
1\
8
1
B/8
0
.
.
8.
>8
/8
=
>9
.
9
1.
1.
>9
8
8
7
/
:8
0=
6
>D 6
J 8
/8
0,
.
>? =
76
1
7
-
I
1
.=
9
M ;;
>6
/ .H
0
/9
9
D .
/6
M
>
.
08 J
6
/
/6
-
=
-=
>6
/8
J=
8
MH
:
-
.
<
6.
=
I
I
=
D 88
<
-
/8
8.
C9
/9
7
9;
/6
8
9
1
<
9
U ;; / <
D 8
MH U:
/
09
; 9.
M
1
-
8
/8
.
UB
C8
J
9
C8
.
C
>6
9.
9
( ;=
6
;
>=
9-
-
8
09
-
=
:
;
>=
9;
C-
-
:9
>? =
:
<
:
7
1
.
.
.
<
;=
J
=
;
I
8
.
J
>=
-
9
-
8
09
6
-
8
<
8
/- =
8
<
1
J
>?9
>
1
0.
8
8
6
/8
C6
8
-
9;
B;
6
8
-
/8
M;
0
76
/
7I
D
/8
6
.
J
-
8
9
L
KL
;
1
.
9.
C-
>9
8
J
J
=
6
/8 _
9
C
?
0
>?9
>? =
?J
=
U J
;
:8
8
7;
/?
6
/
C9
C
M
>9
C
-
`
E
P
7
1
;
<
/8 _
>8
.
76
/8
9.
/6
<=
M8 ;
8.
C6
9
8
E
.
J
6
8
09
:8
.
8
:9
8N
J
;
J
1
-
8
08
>6
.
J
-=
>6
-
8
I
]8
7
/
8
I
X
<
8
/- =
8
<Z
>
0<
>9
>8
S1
B
J
/<
9.=
1
9
-
9
_
>? =
>?9
1
6
1
8
8
<=
<
J
.=
.
9;
>6
9
8
8
:9
J
=
;;
.
B .=
H
I
9.
8
H
;
0
8
8
-
9
8
09
D /6
:
/1
Q
M;
.
9;
>8
1=
<
1
9
a
1
-
8
6
8
-
=
C
9
:6
=
- EG8
J=
.
.
.
<
=
>=
6
-
-
8
6
.
9.
>6
.
I
8.
8
M.
/
7
<
8
C9
8
8
:9
-
.
J
.=
;;
J
;
;=
-a
0K
8
J
)
C6
/
7
-
.
8
76
6
>9
/9
:-
=
>? ;=
7
/8
9
= D /6 .
8=
.
J
MH
.
]W
J
;\=
.
>8
=
1
>9
8N
E 8
=
H;
>=
8
8
9
/9
.;
J
9\
.
.
-.
C8
^
/9
-
" !!
M.
7
D
8
:8
>8
/6
-.
9
MH
/
8
/8 I
>8
1
8
=
-
>[
>9
MS 9
MB
-
.
/6
9.
/8
76
7
J
=
J=
8
8
0<
6
.
-.
8
7-
?
6
0.
?-
?
C
0
8
:
1
.
.
;
;
J
J
9;
/9
7
1
-
6
-
8
09
8
8
>?9
.
=
I
H
6
.
.
J=
>? =
>?9
J
K
=
I
/?
6
/I
C6
/8
C
>0
<
J
9;
>6
9.
/6
/6
/
H
<
. ==
.
.
9.
/8
>6
9
8
6
76
6
&
1\
9
8
C6
<
<
J=
1
-
08 .
>=
.
>8
-
8
6
/6
9.
/8
76
-
.
J
.
0J
?6
/
/8 I C9
C9
>8
8.
1 D /8
'
8
M. - E '
7
.
`
J
8
8 U ;
/
>?- =
MH
0
M
=
I
1
>=
9.
>9
>8
M1
1=
8
E E Y
E
>6
1.
8
A
=
/I
C6
=
=
-
/6
.
9.
/6
/8
76
J
I
/ .H
9
1
.=
>6
0
/9
8
M.
7
8
M
.
08 J
>
K
-=
<
/8
>6
.=
1
E 9;
>9
C8
/
.
M8 ;
0
7-
C
8
.
7
1
/
.
.
.
J=
<
J
J
;=
>- =
1
8
/6
/8
-
6
M
-
>9
-
8
/8
.
J
;
[
I
=
I
7
.
J
;
J
=
=
=
J=
6
>?6
/
.
M;
C- =
-
8
/8
B8
]8
C9
7
B
.
a
B
7
-
6
8
>9
+ "!
"
#
(
$#
.
>[
J=
/6
>=
/.
06
<
1
8 E
-
8
>- =
1
8
=
.
;
D
-
-
8
78
/
J
.
J
9\
-.
1
-
=
=
?
0
9
>?9
J
I
?/
8
8
6
01
6
/8
C
C9
/
6
78
6
.
J
I
I
-=
H=
;=
M.
>6
7-
-= /
H; D -
-
6
>8
:8
/8
7
78 ;
J
;
>? =
C
8
/8
J
C
0
C=
.
.
9\
>? =
C
6
6
/6
D :6
9
d
C9
/
C<
B
78
/?
J
H
9;
1
/8
C
8
=
6
C9
/
.
.
1;
8
:8
/8
7
?/
0
H
9
-
I
]W
Q
7/=
D
0=
6
.=
H;
>
8
.
J
< 08
6
. /
9
6
H
1
6
:6
8
9
6
8
I
H
P
/ . //8
8
9
/
6
1
1
=
. E >8
I
/6
M1
C9
/
0
. D 6
J
.=
1.
8
8
6
8
1
>9
1
6
>-
9
/8
C6
8
^-
1
>9
U ;
MH
U/
8
/8 I
>8
1
8
C8
9;
1
6
:6
E
6
78
/?
>
0/8
]8
C9
7
>9
-
8
/8
operator+
:9
.
<
J
:
-
08
/9
>=
/.
06
<
>?1 =
MH
operator+
>6
9.
8
:I
-
0
-
D B8 =
X
=
M;
0
I
>
1
.=
>6
9;
7
1.
J
>=
8
9
;
.
8
/.
C6
1
0
<
=
1
;=
;
J
8
:;
09
;
0
-
/8
8.
C9
C
.
9;
1
/9
7
8
D 8
M;
9.
.
I
=
.=
>=
c
c
E 8
.
9\
-
MH
C
M;
7
=
C- =
-
8.
/8
C9
/9
7
c
D
8
:6
9
8
>9
/8
.
.
H
J
J
?/9 ;
.=
.
6
8
J
J
.
;
J
9;
1
8
6
8
C6
I
<
M I=
C
B9 .
>8
7
79
8
9M ;=
1
>9
operator+
>6 =
.
6
?
0
>?9
>? =
C
C9
/
?/
7
/9
8
>[
>? =
-
>9
/8
76
8
/6
C6
J
:;
09
;
7
79
a, b, c
.
operator+
B
a + b + c
rational
/8
J
>
0
1
>9
// 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 ;
}
.
8
]8
7
/
.
.=
/6
>
;
9;
1
4.2.5 Const-types
6
;
E Z
MJ
8
)
A
D . = 8;; - =
>6
8
.
>- = 8 J
I
1
9
8
> = -.
/8
. : D
J=
/8
7-=
I
/6
?/
>6
6
]
8
/
C
?
D C9
= C9
7
B
JB . D ;
8
8
:8
/6
1
\
9;
>8
;
>=
=
I
0
6
/
D
/6
]8
C9
7
I
B X
B.
/
1
>9
Rational number r:
1/2
Rational number s:
1/3
Sum is 5/6.
Y
D '
Program 33:
/
6
C9
/
/?
}
<
E
>6
M;
return i > > a .n > > c > > a.d ;
>9
7
8
X
/8 I >9
; >8
<
D 9
C0
1 D 1
8
8
B
:8
1
J
>8
C
8
=
/
6
I "!
. ! 8
J
<
9.
>?9
.
J
J /8
79
8
7
0
6
76
>8
-Z
/8
07
9. /
>
6
> = /6
H
.
. C8 ;
>8
6
.= 1
/
J C8
>6
>?9
9
M ;; 8 D >9 =
E
. >[
J
.
8
0
I :
0J
>
?6
09
;
1
S
.= 8
J
>6
>=
6
I 7
.
J
.= 9
9. 1
>?- =
/9
9;
8
;
/W
-.
.
/8
8
.
rational
8
>=
-
/8
C9
/9
7
8
int
8.
C9
/9
7
}
rational
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
rational operator - ( rational & a)
{
a .n = - a .n;
return a ;
}
rational operator - ( const rational & a)
{
a .n = - a .n ; // error : a was promised to be constant
return a ;
}
const
%
2
09
;
7
9
I
=
7
;
J
8
.
J
<
.
B
/
8
>9
1
8
.
B9 .
-
8
>9
C-
O
J
=
J=
8
E ;;
M
.
=
H
J
.
1.
>6
>
0-
6
I
=
I
J=
6
M<
8
.
> J=
.
/8 E
0
MH
.
/
.
8
/8 I /8 J
>8
B8
1
9
/8
08
>9
/ = 6.
J
8
/8
:; 7
/
09
; 6
H;
8
C8
9.
1
9; 9J
.
;
8.
C9
/9
7
9?>- =
7
S8
:6 ;
8
)
7
1
.
:
1
6.
8
J
J
C
.
J
;
J
9;
/6
8
6
-
8
09
8
.
I
I
>? =
>?9
>
/9
8
B9 .
C
;=
/W
>6
1
-
8
C6
-
J=
I
.
9-
J
>- =
1
8
=
-
>6
.
=
-=
/8
S J=
-
:
P
9I
8 E
Q
-
:
1
9-
6
6
6
.
.
-
.
[
H
9;
/8
EG-
C
>0
>6
9.
/6
/
H
I
=
I
I
-=
>6
/8
/8
/
0
&
<
1\
9
8
C6
-
8
0.
8
6
1
09
;
;
I
8
8
I
.I
<
;
/
8
8
I
;=
>=
/9
7
79
>8
6
>9
0-
0
/8
U9;
M
:
K
/8 I
>8
1
8
/9
8
8
U/.
>6
8
.
J
=
9-
8
>9
-
1
>6
8
?8
.
.
.
E =
E B8
D <
(- =
8
>9
/9
7-
/=
.
6
6 D I
/ I 9 ;;
8
.
/8 I
J
8
>8
M.
7
1
8
M . >8
7
C9
E 8
8
:
.
Z
X
.
-
E 8
C6
9
7.
/
78
8
J
8\
J
=
;
=
.
-.
>6
1
-
-
/6
/8
6.
<
J
=
=
J
/8 _
>8
1
8
=
.
J
9.
>9
<=
M;
>6
8
O
E E
-
9
>9
]8
. 7
^ Z /
. 8J= - =
>6
=
0
6
6
I
/
1
>6
7
/
C6 U .
M.
D = 7
8
8
=
>9
>
<
. 6.
J 9
8
;
B;
1
6
C6
8
7
<
;=
.
/8
6
1
1
J >?9 J
8
1\
8
D
B
.
> =X
8
09
-
J
8
9;
O
W
=
J
8
;
J
1.
=
I
I
=
6
/6
-
/6
.
M.
7
8
-.
1
>6
M.
7
8
J
&
I
4
=
8
.
!
&
J
=
I
=
8
>
8
6.
6
8
:9
B
D /8
(
#
<
.
8;
-
>9
Z
X
E
3
# %
#
9
.
J
<
1
9
.
.
H
+
M8 ;
>X
C9
$#
*
.
>9
-
>6
0
2
>9
a
>`
E Z
9; D
;
8
<
1
6
-
9;
-
-.
1
9
M.
7
8
6
I
-=
>6
-
8
]8
7
/
J
"!
8
.
D I
U
3
-
>6
9;
=
M.
>6
>
0<
>9
>?9
/8
:8
09
C9
-
8
.
1
M .;
9
1
]8
9-
6
:<
/8
-=
>6
0
-.
U
1
8
>6
$
i
/8
;=
>9
.
8
J D 8
:8
09
-
<
6;
J
J
H,
3
C6
1
i
O
.
9.
1.
8
6
B 9-
;
.
B
.
J
J
D
>8
C
J
operator+
/8 I
>8
1
8
.
J
9.
8
6.
-
8
<
H,
]8
7
8
.
/=
J
8
8
H >16
8
I
/6 U - .
/
8
. 8I
J /8
8
>8
1
>6
1
8
U/. E
>
6
1.
8
6
8
09
/
-
><
/6
O
9.
/8
E Z
;
>
9
8
?--
.
>? =
>
/8
1
>6
1
8
9
8
]8
C9
7
/6
8
=
B/8
:
>9
>8
.
M.
D 7
8
M
-
[
J
=
I
<
=
a
J
;
=
=
0 ;=
;
/.
9.
8
.
J=
7-
9.
8
]8
C9
7
>9
-
8
/8
.
-.
8
>6
0
>=
9-
9;
>6 =
E .
E
.
8
1
.
8
E <
8
.
9.
8
-
8
J
9\
6
9
8
.
.
J
<
Z
X
=
J
\;=
=
<
<
<=
.=
/6
MB 8
8
<
<
<
(
8
.
W
<=
H
;;=
;
J
#
8
6
=
=
H,
J
J
.)
6.
C8
>
B8
09
:-
1
8
6
8
.
.
9.
8
-
C6
/
79
M8 ;
/8
C-
8
9-
1
6
.
.
-
-
8
1
8
-
1.
8
9.
\
.
-
/8
C
8
O
=
H,
.
.
J
>6
9.
1
9;
>6
U .
0
1
8
O
=
W
=
E I
.=
8;
-
>9
-
1
>6
.
J
>9
<
J
.
=
M.
7
8
>9
H;
.
J
9-
9;
8
-
=
=
9
6
8
-
C6
/
7-
1
.
.
.
B9 .
6
8
I
>9
M.
7
8
6
>6
9-
W
<
J
=
H,
I
=
<=
<
;
/6
8
9
6
C9
8
9.
8
6
/1
0
-=
-
>- =
1
8
.
J
B9 .
9;
Z
X
H
-. D >6
1
8
]8
7
/
8
>9
D 9;
M;
9
01
8
:;
09
;
M
J
>
1
8
-=
6
I
M.
7
8
>6
-
8
]8
7
/
>9
-
06 .
>9
8N
.
=
X
.
6Z
9
6
>6
I
-=
-
8
]8
7
/
>9
>
?--
/6
8
(=
.=
9;
>=
6
=
?J
;
= D `; >?9
0
U J 6
?
; >
D 9
:8
8 ; 6 H 08
7
6
/?
M< >
.=
6
/
;
I
/6
.
C9
J
1
8
C
80
>? =
; 6.
\
>?9
C
0
MB 8
9\
?
9
08
/6
8
B<
= -8
. 6
I 9C6
. 9
J
<
9 \ 78
<
8
/
8
<
. C6
>
=
J
78
=
Y
/?
C8 D
6
/
C
8
C9
1
J 6
C
>9
.=
= :
/8
C9.
)
- E
8
;=
<
MH
8I 0
8
=
.
9.
=
. 0/8
J ^
B8
1
.
1
J
J 8
8
6 ; -1
>=
87
C6
7
6
KL
;= > =
L
/8
.
= 6 E Z
I
6. E .
J
8
C-
/8
>
1
8
>9
J
>? =
C
0
>6
1
C .=
>9
U8
M
J
6=
C<
6
:9
0
<
<
78 ;
1
>9
>9
>9
J D
H
H,
I
M ;=
/9
>
0
1.
D 8
6
.
-
6
>9
>=
J=
6
/I
=
>8
/
0
/
/6
X EG.
J
.
9.
9
>9
>
9
/;
08
>6
9
>? <=
MH
7
/
:6
?<
=
S=
.
1\
8
1
9
8
-
9. D
<
=
1
B Z
9
M ;;
8
C6
0
/9
C9
/
?/
7
8
8.
-
9
9.
8
J
J
6;
B8
.
>=
>=
1
>6
-=
-.
>8
1=
8
-
/
0
C
const
U =
8
9
'
E Z
?
M
:
/I
C6
<
<=
.
9.
-
1.
9
8
8.
/8
C9
/9
7
.
/N
=
?> . =
-
8
?-
C
/6
=
;;=
/
const
8
/8 I
>8
1
U8
M.
7
8
=
>=
1
>6
U/.
6
/8
8
C9
/9
7
.
1.
=
<
8
> ;=
8
>6
J
8
(=
>8
/9
7
79
8
M .;
B
6
8
;
=
8
E <
(=
. ==
9;
H
8
>=
;
/
/8
>9
8
-
0-
/8
;=
B8
B [I
J
const
>6
>
I
0
/9
/6
.
J
C9
/9
7
=
/8 I
>8
1
8
=
>
:9
09
9
?--
>
:8
/8
>9
1
8
-
M9
B9
-.
B
1
const
9
0;
I
7
C8
8
.
9.
>6
9.
/9
8
/9
6.
>-
8
>- =
1
B8
-
M.
7
8
7
C6
8.
const
C
*
J
/8 I
>8
1
8
.
9;
<
J
;
8.
0- = D /8
S
8
>9
1
<
>6
.
J
U/. -=
8
8
:
/8 I /8
>8
M8 ;
1
/
8
8
> = X /- .
7
=
1
.
/9
.
0 .=
J
1
8
D ; 79
/9
7
;=
I
/6
1
C
9
H=
9
;
7 ; M .=
/9
6
I
C9
.
J
8
8
.
/8
76
/8
6
I 9
.
1
>6 E /6
-.
U/
/6
0
8
.
/8 I >
>8
9.
1
U 8 D M8 ;
M.
7
.
J=
8Z
U
=
.
1;
8
8
8
-
>8
6
>6
U .
M.
7
8
C
0 E
I
U
-.
B
//
//
//
//
/6
J
8
8
8
8
.
. ==
>6
>9
-
6.
=
D
D
8
>-
9\
1
6
-
8
1
>6
J
int n = 5;
const int & i = n ;
int & j = n ;
i = 6;
j = 6;
>8
>8
B-
J
8
H
8
>=
1
>9
>
;;=
H;
J
M.
7
8
<
/8
M;
>? =
b
E 8
:
79
X
-
J
B
8
9
/9
.
]8
C9
7
>
I
a
/
-
/
0
8
/<
> J=
8
<
.
6
I 8J
. J= 1
>8
. D 8
C8
7
.
J
/6
8
/9
1
M
C6
7
6
H,
;=
/8
8
1
. /1
0- = 8
9.
8
8
< 9
.
.
6
C8
>= 7
. == /6
9
/9
( ;=
M
<
:
8
<
/6
+
.
08 J
[
E 4.2.6 What exactly is constant?
-
8
9\
9
const int n = 5;
int i & = n ; // error : const - qualification is discarded
i = 6;
C
/8
6.
>9
>?- =
=
J=
1
.
J
. E
H
8
> J=
>9
-.
>6
.
=
6
I
M.
7
8
8
8
:;
09
;
-
C6
const int n ; // error : uninitialized constant
8
8
<
MH
0
8
-
C6
/
7-
.
J
I
1
9
2
.
;
J
=
1=
9.
8
B<
6
-
9-
H,
8
6
>
8
6
8
09
6
0
9.
J
:
/9
8
1
6
.
/.
8
J
=
-
8
:;
09
;
C<
X
;
8
.
n
/8 I
.
6
.=
/
-
1
0J
M
Z
.
.
9.
-
8
-
C6
/
n
S
;;=
;=
X
7
/8
>9
09 J
n = 6
>9
-
8
J
" "
9.
1
B/8
M;
.
9;
>8
1=
<
1
9
M9
8N
J
-=
<
>6
1
-
8
.
const int
C9
O
1
J
H
C
.
J
=
=
? ;;
8
9;
-
const int n = 5;
n = 6;
<
/I
C6
#
#"
"
7
C6
8
.
.
.
H,
8
>8
.
&
const
const
8
(=
.=
9;
!
$
"
"
0
1
D 8
6
8
W
<=
J E <
8
6
08 .
n
$ !"
#
#
.
I
M.
D 7
8
const
#
!
!
!
"
8
/6
C
H
const int n = 5
8
Definition.
!
C9
>
const
!
"#
const
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
4.2.7 Const-references
// 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 ;
}
const int & i = 3;
2
;
J
1
-
Y
.
J
.
1
.
8
09
:.
>9
; E
=
8
6
)
<
9
8
=
<=
9\
C.
>-
.
.
H
8
1
/8 _
8
- D >8
H 18
8
B;
6
>- =
0- ,
.
.
/J
8
8
> ;=
8
1
>8
1
0
9.
>9
'
6
.
<
8
8
.
J
1;
8
6
8
-=
H;
-
6
/9
7
=
.
S'
C9
/
/?
>=
> ;=
8
/8
;
`
=
-=
<
>6
1
8
]8
C9
7
-
>6
<
J
H
1;
8
/9
8
-
6
9
B8 ;
=
=
Z
E
.
=
=
=
I
B
J
>6
-=
-
8
8
]8
7
/
.
.=
J
8
B<
(=
.=
9;
=
6
1
8
8
6
]8
>6
.
.
.
.
J
J
I
8
>6
<
1
9
M ;;
8
M.
7
/9
=
C- = D `;
7
6
M; >
6.
H
8
9;
01
9
:;
/9
8
=
=
. 9
C
H;
8
9\ .
8
J
9.
X
/6
01
6
79
;
7
<
8
H
/9
8
<
8
. 1
;
6
/9
C
8
9\
<
8Z
>
6
<= > =
/8 _ 79
/?
>8
6
1
/
8
> = C9
6
D -
>9
-
8
9\
7
M;
C
C- =
8
:;
09
;
>9
J
I
>=
>6
1.
const
8
J
=
/
01
6
-
. D
J=
<
<
X
>
.
8
J
E
M
;
J
>6
1
9
8
9-
1
-
.
1
6
-
.
9
.
.
J
I
;W
<
J
J
1
<
>6
9.
/9
=
.=
1;
8
>6
>
.
>9 =
.
J
08
>6
9.
1
8
/8
8
8
8
J
9;
6
>?9
0
6
/8 I
>8
1
8Z
8
J=
> =X
8
09
>
.
.
.
U/.
:
/
08
/8
D >8
C8
9.
-.
1
8
6
8
.
.
.
.
/8
8
6
6
.
.
.
.
.
I
=
=
H
J=
J
<
1
9
.=
X
D 19
;
0Z
>
;
8
-
/
C=
7
0
>
/
0-
:8
>8
8
C9
/9
U .
M.
7
78
>6
C
1
C6
-
-
8
1
8
=
=
1
6
8
8
6
/9
0
D >6
M
J
J
I
<
=
.=
.
.
.=
8
>W
>6
1
08
8
>?9
>
;
<
1=
<
8
9.
/8
MI
0
6
S6
M0
1.
M ;=
/
8
/.
/9
>
>
0
8
8
-
A
X
0
.
J
R
.
-=
<
6
8
8
1
>8
0
>=
8
6
.
9.
1
6
>6
C
J
I
=
W
<=
:
C
;
H;
W
<=
9;
1
6
8
9
6
C
8.
/8
9
7;
/9
C9
/6
9
I
.
8
9.
/9
-
/8
8.
C9
/
D
-
8
1
9
78
/
8
8
]8
C9
7
J
8
.
.
M.
7
8
6
>
/
08
/
9J
MH
;
;
.)
;
`
I
8
C9
-
8
.
>[
J
/9
>
.=
.
1
>9
.=
.
H
B
.
8
8
8
C6
8
/6
/8
.
.
.
<
H
J
<
;
<
0J
6
-
>9
=
I
J=
C
.
8.
/8
C9
J
.;
.
.
.
I
=
I
I
/
>
/
8
.
6.
6
08
/
>
9.
.
1.
>6
>
0
-
.
<
J
=
I
J
=
=
<
6
-
8
<=
/8 _
>8
1
8
>
9\
8
9
M ;;
C
/
/6
MB 8
\
.
J
K
8
9\
M;
C
>6
8
/6
8
/8
U .
M.
7
8
-
>6
I
E
8
>9
9
6
6.
>[
M9
MB
C
1
>8
>8
H;
W
<=
J
.
/9
6.
-
J
=
.=
J
.
M.
7
8
6
>
/
08
/
I
>=
S>6
1
78
]8
8
>6
.
9
M ;;
>
6.
0
1 D
J
9
1;
8
/9
0
0
9-
/I
C6
6.
-
=
I
B
-
8
8
/8
8
>6
0
J
.
8
9
<=
9\
/8 _
>8
1
8
C
.
)
<
M
1
B/8
6
C-
>9
8
C8
-
C6
/
0- =
.
=
=
I
.
1.
;
J
J
=
I
=
.
1
>9
.
-.
>6
-
8;
=
I
=
-=
>6
-
8
9;
]8
7
/
1
>6
>
08
.
.
9.
-
8
-
C6
/
J
/6
8
1
-
0-
8
8
:8
>8
-
D 1
9
8
-
8
/6
>
.
.
6
?.
1
6
>9
>
0
J
I
=
-
8
6
.
9.
8
/?9
0
N
J
<
=
I
8
/8 I
9
H;
8
.
6
7/
J
9;
:9
9-
8
8
E
>8
M1
/
1=
8
/6
>6
. EGJ
J
=
8
8
J
D >=
/
C
:
09
>9
;
9.
8
=
9
>6
0H D
6
. . C=
J 7
87
M;
/9
1
>6
J E -8
J
.=
.
8
/8 I
>8
1
8
M.
7
8
.
J
>8
/9
>
[
=
MI
0
6
7
.
9.
[
I
. D 19
J -
M.
7
8
=
>-
>
/
08
/8
8
/8 I
. >8
:
9
J
9;
<= - = 1
=
8
< /8 _ D 1
M.
9
- D 7
. >8
8
6
/
8
1
.
8
78
.
= 8J
J
;
I
08
9
.
1
I
J
8
>
/
08
I
1
08
.
>
\
.
=
/
>6
. = MB 8
>
>6
1
M. /
9;
/6
7
;
08
< ]8
.
8
= 7
/
>
?; /
8
8
MH 9
9; -=
/
>
6
0
8
H
=
/8 I
. >8
J >9
1
9/
E 8
:
>
09 E
^
6
;
B
8
8
_
8
>9
J=
1
;
E .
8
<
9
M ;;
/8
>8
?
.
9.
8
6.
/8 I
>8
D 1
8
>9
. BJ D
8
/8
B
>=
M.
7
8
/
08
-
>
/
08
8
/6
1
>9
/
J
\
9;
/9
7
/6
8
/6
-
/6
I
M8 ;
9
-
-
M.
7
< D 8
E 8
6
1
>?6
/
9
M ;;
B
-
1.
8
C8
0
/
/6
1
M;
9;
1
1
9
7D /=
8
=
8
1
6.
=
.=
1
/
.=
H 9 ;; 9 H 8
7 E 8; 6
.
>6
I 8I
J
J
/8
:9
/9
8
1
0
>6
E '
= C9
>8
E Y% /6
D
. U . 18
8
E
Z 6I
.
. M. E J= D 7
. /8
M
\
>[
0
J
X
6
MB 8
7
B8
08
1
.
I 9; /
>
J=
; C6
H
8
/6
8
7
. 1. M H
= /
<
.
= :
0- =
/8
.
=
>6
8
C6
09
/
=
;
>=
= 9. M.
8/
>
- D = 7
8
I
8
>6
>9
=
8= >
1
>9 = M
/9 ;
. 6
9;
B
8
J
.
M
;
/I
/8
9
.
M< >
06
C6 E M 9
C6
8
.
0
[
1
>
=
\
=
9
.
8
8
.
. 8
1 D I 8/
9
J
<
J 91
M
8
. /19
I
1
/6
I /
>6
= 8
/6
.
8
0
C
6
MI
I
<
7
6
U . 0
/6
I /
>
C
9;
M . B6
.
8
7
:
7
<
J
9
>9
/ D - = >8
08
/9 D
0;
Z
.
=
I
. C9
. >
>
?08
.
9
I /6
D 9
1
8 . ?0 J 1 .
>
6
1=
=
8
/8
<
>6
1
<
S
. = 68
>8
9J 7
9
>6
. = U9
.= .= 9 ; 9
I
M
I
;=
/H
/9
9
/6
S
>9
M>
const
>6
.
.
J
H;
=
>9
-
I
- D
U .
M.
7
8
>6
1
6
H
>?8 =
9-
E
;
9
:;
/9
1
6
=
9
-
=
I
;
J
.
?> . =
1
>[
]8
08
const
:9
6
>9
8
C-
9.
8
9
/9
J D
/9
8
H;
8
>6
1
9
6
08
6
9.
=
/8
>6
.
.
<
H
9;
1
8
9
( ;=
- . U .Z
= /
>6
8
/8 I
> X >8
C9
1
8
M8 ; / I
C6
0
>=
8
=
.=
6
8
-
9-
8
const
>9
8
-
.
9.
:9
8
B/8
9I
.
M;
>6
8
1
=
const rational
/6
C
>9
7-
8
76
=
9.
;
-
1
>6
/
H;
9
/9
J
J
J
7
const
.
;
70 . =
-
08 .
-
-
D 8
6
01
8
9
:/9
:
.
;
8
>=
.
9.
.
9;
1
8
7
6
=
/8
6.
>9
>[
M.
7
8
E -
M
8
J
0,
-.
;\=
D >6
.
M.
7
8
6
0I
I
>
1.
>
/
08
9
/-
/9
8
79
-
K
9;
M9
U .
M.
7
8
C
>6
8
8
8
;
<
8
6
-
1
8
6
6
.
.
M.
7
8
>
9
?--
>9
=
I
H,
<
9
( ;=
.=
:
I
=
.
M.
7
8
8
-
8
-
J
J
B
9
=
=
1
8
.
=
.=
/J
8
/8 I
>8
1
8
M.
7
8
EG-
>6
>
1
>6
>=
<=
/8 _
>8
1
8
-
8
=
<=
J
;
J
J
9\
C<
M9
;
<
?> . =
0
.
.
.
.
.
.
9.
8
09
>9
-
6
>=
1
6
8
-
C6
/
7
8
>9
>6
=
8
/6
C
.
-
8
J=
:;
09
;
>
B8
B
S
/I
C6
8
D 8
>[
B9
8
8
-
8
:09
.
H
1
9
8
6.
U .
M.
7
E 8
>6
>
-.
H
8
^ Z
I
/6
.
D J
9.
.=
M.
7
C8
0
:6
9
=
-.
>6
1
8
-
.
=
J=
J
E 8
G
1
>8
/8
9
-
8
.
[
_
<=
9\
C<
>9
8
-=
H;
-
6
7-
-
:8
/8
>8
M.
7
B 8-
C
.
.
.
J
;
H;
6
C<
>9
8
9
/9
9;
1
6
9
9-
8.
/8
9
7;
/9
C9
/6
8
8
-
06
.
;
J
=
E
A
.
;
H
J
.
=
I
=
S J=
-
-
6
B ;;
6
6
8
/01
9-
8
O
E Z
E '
>6
1.
8
8
8
-
I D 91 \
-.
=
H,
9;
1
8
>6
1.
8
=
>8
8
6
>8
X
9
<
J
<
<
J
P
;
=
6
1
6
-
8
8
8
>?9
>
C9
/
/?
78
;
>6 =
E .
78
C6
-
9.
8
J
8
9
-
9
8
8
09
D
;
J
8
09
.
.
J
1
;
;
J
/08
<
`
C .=
8
C9
-
9
J
=
J=
)
6
M6
0
-
>9
/6
7
.
.
8
C=
/6
:8
>8
C
-
79
/
/?9
7-
.
.
<
Z
6
6
>9
0
8
/9
J
J
<
J
9
D H
;
8
:
.
.
.
.
9.
6
B6
B
M
B
B
\
<
;
0J
6
>
.
.
=
=
U
J
=
I
I
1.
:
;
)
=
=
6
/
8
76
/
7
.
.
:9
/9
9.
1
9;
>6
0
9
0H
6
.
1
>6
-.
=
W
=
U
C
1
C9
/9
>6
7
>
I
I
=
I
=
.=
9
0;
/6
9
9
> J= D ;H
\ 8
6
8
1
.=
M.
7
8
6
1
J
9
0H
6
.
.
J
8
79
7<
9
N
.
> J=
\
0
:8
/8
>8
6
1
8
/6
M .;
M
=
I
X
Z
X
CZ
J
M .;
9.
/
J
)
?- ;
8
.
6
6
.
?- =
8
09
>
/
08
/.
1.
>6
>
09
I
MH
/
8
/8 I
>8
1
8
;
9;
1
<
<
.
9.
-
>8
7
1
C6
>6
/6
>[
J
=
=
B .=
M<
=
I
.
.
.
9.
>8
-
]8
:8
>8
>
>6
/6
8
J
;
9;
C-
6
-
-
H
6
>6
>
08
.
>=
/8
8.
C9
/9
7
1.
>6
>
9
0;
D 88
E
C
/6
8
6
-
-
8
1
1
9
9. D 8.
/8
.
J
8
/6
1
/8
I
I
I
.=
8.
C9
/9
>
.
9;
>6
7
>
0
;
9
U ;;
MH
U
C
/6
9
6
8
:8
09
7
0
.
6\
6
6
/ <=
8
1
.=
S>6
. E 8
;
<
<
>=
8
-
>6
9
.I
/8
D 9
;;
=X
M I M0
0
6 D
6
:
08
/6
>
.
<
9;
01
7
8
D .
/8
/
<
.=
06 \
6
>8
C9
/
;
J
/<
8
>9
7
/9
7
:
.
06 \
6
6
:9
#
84
D .=
1
B-
>9
8
/8 I
>8
1
8
C8
/
< D >6
J
J
J
.=
.
.
8.
6
6\
/8
>
-
9;
/=
8
<
Q
/9
:09
B
B
B
-
8
09
C8
-
8
1
9
U ;;
MH
U
:
09
;
/8
>
/<
8
-
9.
.
9.
>9
D .=
1
.
J
8
9
<
/<
8
6
I
.
J
8:
/<
8
/8 I
.
6
- E
C6
>9
>6
1
.I
<
M =I
:
:
>8
6
-
`
; D -;
6
=
X
.
=
−
-
I
8.
>8
J=
8
.
:;
09
;
0
8
I
>=
9.
8
-
.
t
/1
>6
1
/6
.
=
;;
;
J
J
9;
1
/8
C
.
1.
>6
>
08
>8
=
J
I
/
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 ;
}
=
=
.
8
/<
8
/8 I
>8
B 18
>
/
08
J
=
9;
>=
-
8
C6
1
8
H
B<
:
J
9
<
/<
8
-
8
-
6
B<
.
:;
09
;
8
6
-
=
result
/6
<
8
>W
8
<
H
8
J
:9
>
0
/8
.
J
J
Z
=
/I
8
8
<
>9 E
-
/6
9
9;
operator+
1
>6
U .
M.
7
8
.;
9.
.
O
=
=
M
C8
C
result
>=
-
08
-
8
1
>8
-
8
/8 I
>8
1
/8
08
/-
Y
A
<
A
X
const rational&
Const Guideline:
8.
1
>6
J=
.
'
1.
8
8
>9
>?- =
E
E
>6
>6
I
=
]8
7
/=
8
<
6
H,
D 8 E
1.
E
>9 E
0<
>9
6
-
9
1.
8
8
8
-
const
M?8 ;
J
H
rational
const
.=
.
9;
8
8
4.2.8 Const-types as return types.
<
<
8
>W
I
return
const
0J
6
.
const
6
8
:6
C6
6
M9
7
.
.
6.
8
6
>-
.
<
<;
J
-
/8
8.
C9
/9
78
:;
09
;
>? =
>9
>=
>- =
1
8
.
J
8
:9
>? =
D const
_
=
.
8
8
7-
D
M
-
>8
.
/=
C8
08
/
/6
C8
:6
/8
9
9-
6
.
<=
J
H
J
I
E J
9-
/1
:8
>8
/6
/8 _
>8
M .;
8
:9
8
M9
C
C9
/
/?
78
DC
;
.=
9.
/6
7
1
>9
-
C8
=
. E -
M.
.
7
D J
=
E 8
[
.
I
J
/8
= 8
/9
09
I 8
>
-.
<
;;=
C9
-0 =
>8
.
.
9; 9.
M . >6 =
7
B8
/6
J
/8
9
8
/0- .
B1 . - =
7
= /
. 8
J
/8 I
C/
9; 9H
;C
;
8
/8
8
C9
/9
7
const
> ;=
8
6
I
1
6
<
E 8
E
6
C9
/
?/
78
6
operator.
J
<
.
.
J
I
.
J
=
8
/8
6
>9
>6
.
.
J
E <
0
D
B
9;
>6
-
.
.=
6
"
)
C9
/
?/
/6
8
/6
C8
C
8
]8
C9
7
.
J
;
<
I
=
I
9>=
.
>8
/6
\
>- =
1
8
.
J
8
7
J
8Z
/8
-
>? =
/9
>
=
=
1=
>8
8
/8
-
M;
M
:
>6
9.
(=
B
M
J
. ==
.
=
%
>=
8
8
<= D 8 <
9.
M8 ;
/
0
8
8
C
6.
C=
>
]8
7
/=
8
<
6
H,
8
1
.
8
6
1=
9.
8
<
.
6
-
9-
9-
9
B.
8
9
U ;;
MH
U
:
09
;
1
6
1\
9
H
;
9;
.=
9
M ;;
>8
-
-
8
8
;
:;
09
;
>9
/8
8.
<Z
/9
7
J
9;
1
8
.
C9
D
8
S 6-
7
/
70
=
H
<
D =
8
B
B/8
6.
>9
D 8
1
8
6
-
8
8
76
>
9
<
/<
8
-
X
.
M.
7
8
6
/8
8
C9
/9
7
`
J
J
I
I
=
M
.
.
<
J
J=
\;=
>9
<
>
1
8
.
8;
6
/8
7
1
C6
>6
>
6
01
.
;=
9
M H;
/
>9
=
>W
6
/9
/8
8
/9
-
8
=
I
.=
H;
<
B<
M
:
-
/6
/
/
:8
/8
/6
8
9
-
1
08
:8
8
>6
U ;
>=
U
.
.
9;
8
8
/6
8
/8
-
const
4.2.9 When to use const?
const
const
X
Y
2
&
&
'
" !!
"
+ #
"
&
4
&
%
%
#
"
"
2
)
"
%
"# $
(a, b)
+
%
&
%
( 2
"
+ @
Z
X
Z
X
)
!
@
"
+
3
)
"
"#
#
+
%
#
&
&4
#
'
$
&
"'
"#(
"
)
%
)
%
#%
%
!
( &4
"
)
"
)
%
!
!
+
&
%
)
$ !
)
$
%
4
&
"
&
'
#
#
%
%
%
) !
"
( +
"#
!
#2
( )
"
#
+
!
"#
&
!
2
"
"
)
$ !
)
#
"
#
&
(
"
)
"
#
(
#
)
*
4
+
!
&
#%
&
"
#
"'
"
#2
=
U
;
J
1
H
<
&
"!
)
#
6
8
8
.
<
J
>9
/8
76
/
J
6
C=
7
0
.
9.
/9
-
C9
/
/?
7
>=
/6
/8
9;
.=
=
6
/I
8
/8 I
>8
1
8
M.
7
8
^-
%
%
+
.=
8
8
.
<
J
>9
/8
76
/
!
"
$#
$ !
)
"
*
#
' $
#
" )
&
&
' !
"
#
"#
J
6
C=
7
0
.
9.
/9
-
C9
/
/?
6
>=
/6
/8
9;
1
>9
-
#
.
J
.
X
&
&
%
9;
"!
"
#
"
-
8
(=
C
/6
"
>
"
"'
"
)
2
) #
+
" # +
"
#
" #
)
"
$#
#
,
)
#
"
.
%
^-
8
/8
7;
/9
C9
9;
1
X
IZ
J
/8 =
6
8
C6
-
6
<
M =I
C
I
=
.=
.
9.
C8
7
1
>6
>
08
/
<
=
B Z
-
<
Z
X
9;
1
>9
/
.
1.
9
M>
)
U
'
>W
>? <=
/6
1
1
9
-.
>6
8
M.
7
8
0J
6
8
-
6
>9
1
C8
-
<
9;
1
>9
/
.
1.
9
M>
?9
=
M.
7
8
^-
I
<
<
>? ;=
−3
.
2
U
U
-.
1
>6
6
>=
-
>6
9.
/9
:=
>8
7
/?
6
/
C9
B
<
J
1;
8
8
.
<
>W
Z
<
>? ;=
Z
>W
21
−14
#
'
"!
#
"
"#
#
K
J
<
8
> ;=
E 8
0
.
.
-.
>6
8
6
.
>6
U .
M.
7
^8
1
/6
<
M.
7
8
6
/I
8
/8 I
>8
1
8
>9
>
/
08
/
/6
1.
=
I
>=
-
>6
>
I
<=
.=
M.
7
8
-
/8
8.
9
7;
/9
C9
C
/6
I
:6 ;
>? =
:
0
/6
-
>6
>6
1
-.
6
7<
/
U8
>9
9
1
7.
]8
8
.
Y
9.
-
Z
X
E
E
E 6
8
9
8
.
H;
H
<
;
0J
6
-
0 .=
1
D ;
/9
M
0
6
/9
7
>[
.
.
.
<
K
J
<
<
<
=
8
> ;=
EG8
0
-
>6
8
U .
M.
7
8
>9
1
>6
>9
/8
>
'
0Z
D
8
/8
^-
C9
/9
7
8
]8
C9
7
/6
.
1.
>6
>
0
=
I
;
.
.
<=
J
<
<
<
2
-
/6
1
>9
C8
I
.=
# %
#
" !!
>9
2
"!
'
" !!
8
>8
_
/8
>8
1
8
H
B8
.
8
>9
/8
>
0Z
3
%
2!
X
.
=
0
.
*
J
<
=
>=
^8
<
8;
8
/8 I
>8
1
8
8
/<
8
/8 I
>8
1
8
M.
7
8
>9
H
> J=
8
78
1
>6
1
9-
Y
X
J=
E
E
;
E <
0J
6
6
D >=
.
M
0
6
7-
.
.`
+
%
&
( $
3
2
(
&
%
"
2
)
" !!
#
"
+ "#
'
'
Z
'
Z
X
Z
X
Z
#
#
#
%
&
$
$#
J
<
' %
.
9;
8
>9
.
<
-
/8
>
Y
0Z
foo
"!
$
"
"
"
#,
int
)
#%
4
&
4
gcd
"
!
"
#
%
)
"
#
(
$#
"
&
#
&
&
int
%
(
"
Hint:
!
#
+
%
!
!
#
&
(
#
)
"
#
X
X
Exercise 102
&
%
#
"
$
%
Exercise 103
#
+ #
"
#
"
$!
*
&
T foo (S i)
{
return ++ i;
}
Exercise 101
Z
X
"
( "!
" &
)
#
"
$!
)
" !
&
%
"
const int&
*
&
4
&
%
2
( rational.o
"
4
&
"
"
"
2
)
"!
&
'
2
" !!
int int&
const int&
"!
'
3 !!
%
)
int const int int&
(
!
&
(
$#
libmath.a
"'
"
"!
#
"
Exercise 100
(
Exercise 99
" !!
)
$
Operational.
"
Dispositional.
%
2
4.2.10 Goals
int a = 5;
int b = 6;
// here comes your function call
std :: cout < < a < < "\n" ; // outputs 6
std :: cout < < b < < "\n" ; // outputs 5
4.2.11 Exercises
// POST : r is normalized
void normalize ( rational & r );
// POST : return value is the normalization of r
rational normalize ( const rational & r );
// 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 );
{(2, 1), (0, 2), (0, 0), (3, −4)}.
'
2
2
"
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 ));
}
+ #
)
2
const int & bar ( int & i ) {
return i += 2;
}
#
$
%
"
3
,
"
&
"
&
!
&
' (
+ #
" #
$
&
#
)
(
$
"!
(
"
)
$ !
)
#
"
"#
2
"'
2
"#
2
# "#
"
"'
"!
'
" !!
Z
X
"
$!
*
&
"
$ !
"!
" !
"
#
*
"
#
#
%
%
'
2
&
4
(&
#
)
*
&
" #
$
"'
!
$
&
+
)
#
%
"
$!
"
$
"
"
#
'
)
(
)
"
32
+ - * / %
"
"'
2
$ !
)
b
2
"
%
"
*
#
+ $
#
)
#
)
"
a
( ("
(
" !! +
#
"
" !!
4
#
(
"
#
4
&
int
F50
$#
%
(
$#
( bigint
1, 000
"
&
"
4
!
#,
a = (a / b) * b + a % b
bigint
(&
%
!
!
)
( %
"
) "
@
Exercise 106
$
%
!
!
"#
)
"
#
(
$#
&
" !!
4.2.12 Challenges
"
(
!
#
%
"
"!
int foo ( int & i ) {
return i += 2;
}
+ main
%
!!
) "
@
# + #
"#
Exercise 105
"
(
)
"
#
(
#
"
(
)
"
#
(
#
&
"
(
)
"
#
(
#
(
"
)
"
#
(
#
2
(
"
)
"
#
(
#
"
+
const
!
&
3
2!
)
2
3
&
%
&
"#
'%
#
'
"
"#
!
&
&
"
)
"
#
(
$#
( %
!
!
#
&
$
"
"
$!
# &
!
#
"
"#
$
"!
)
#
%
#
"
Exercise 104
int main ()
{
int i = 5;
const int & j = foo ( bar ( i ));
}
int main ()
{
int i = 5;
const int j = bar (++ i );
}
2
© Copyright 2026 Paperzz