<=
/div>
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/pres.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0001.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
CSE
303
Concepts and Tools for
Software Developme=
nt
Richard C. Davis
UW CSE – 11/27/2006
Lecture
21 – C++ Inheritance
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0001_image001.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhyAF2AHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADG
AXUAgAAAAJkAAAL/jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgxosSJFCtavIgxo8aNNhw7evwIMqTIkSRLmjyJMqXK
lSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSLGj2KNOmkAgA7
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0004.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
2
Administravia
=
8226; Having
a partner !=3D getting a free ride
&=
#8211; You'll
evaluate your partner at end of HW7
&=
#8211; Work
things out yourselves, if possible
&=
#8226; Back-stabbing
has risks
&=
#8211; This
simulates real life
=
8226; HW7
posted tomorrow
&=
#8211; Discussion
of Profilers postponed
&=
#8211; You'll
still have just over a week
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0004_image002.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0006.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
3
Where We Are
=
8226; Up
to now
&=
#8211; Linux/Shell
scripting
&=
#8211; C
&=
#8211; C++
&=
#8211; Tools
for Developers
=
8226; From
now on
&=
#8211; More
C++ features
&=
#8211; Other
tool/development topics
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0006_image003.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0008.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Today
=
8226; C++
Inheritance
&=
#8211; Concepts
&=
#8211; Syntax
&=
#8211; Semantics
•
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0008_image004.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0011.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Today's Example
Perso=
n
Base =
Class
Deriv=
ed
Classes
Stude=
nt
Teach=
er
See Exa=
mple
in Inheritance.cpp
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0011_image005.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0011_image006.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhTwAhAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAABO
ACAAgQAAAAAAAMz/zAECAwJqjI+py+0Pg5i02ouz3nybDobieH3kiaaCqbZuxr7yG882Wt96mO++
1vsJK8HhsGj8IZO7JfPmfM6iUpqkaqRiVdot7ur1dcOjMZkHPtvMag67DUzDXe95SW5P1fOUPX+F
91cWQVhoeHhQAAA7
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0011_image007.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh0gBEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAABADQ
AD8AgQAAAAAAAMz/zAECAwL/hI+py+0PYwq0WmAzlbz7D4biSGLaZpxoybbuC7sqMsf2jeeyNvH6
DwwKTb5eZohMKj+XC6O5WkqnyUrP4bRSt9yb9ooNGLvkcuj7QpvX7JQ69m7LpU5gfI7/1Yf3vH8X
pdT3R8gUOLVXqMgxSHe4CKnQuDUZmZc4V2m5humnuUn52SYKikSKd1qak3rJqgr42uAaKzKraEsb
0Zm7gMsr6bsZzLv7CzGsikyrDMmcW2x84Gw8LVcdTYQt/agNcy2rEi4+Tl5ufqR3rr7O3k4hAB8v
P09fb3+Pn68vL6a3/w8woMB8AQYaPIiQn52EDBsKLOgwosR4/XRAnIhR4sWMzRwHVlzVMSTCjSJL
3vuIg6TJlfZUsmSJ0svLmfVc0hQZ04bNmyZ38syYE87Pmz6Halxo9GXRpA2DemMKE2pIp2mk9rTK
kaoMrDi5YtTaYqnXg2LH/gPLoqzZgGrX4kNboq1bfXLn0oNLoq7dlntHIu2bUC9gvCMEA6Z42OPf
xB4Zs13sGKDhvYRrRW58mS7kzAQ5E9zsmW/olqBHz5tst/IZ051Zny7tWgDquapBzO57e21tJrFF
95YN23Vus7s9DKftLrlyd3aWO39+rgAAOw==
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0009.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Inheritance in C++
•<=
/span> Three types
–<=
/span> public (most common and most Java-like)
–<=
/span> protected
–<=
/span> private
•<=
/span> Public inheritance
–<=
/span> public in base class à public in derived class
–<=
/span> protected à protected
–<=
/span> private à not accessible in derived class
•<=
/span> Facilitates encapsulation (information hiding)
=
;
•<=
/span> Protected data members accessible from
=
–<=
/span> Member functions
–<=
/span> Member functions of derived classes
•
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0009_image008.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0010.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Base Class and Derived Class
R=
26; class S=
tudent
: public Person {
R=
26; …=
R=
26; };
=
•
=
8226; Class
Student inherits from class Person
&=
#8211; Student
is called the derived class
&=
#8211; Person
is called the base class
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0010_image009.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0007.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Syntax Differences with Java
=
8226; Declaring
derived classes
&=
#8211; Use
"public "
instead of Java "extends "
=
8226; Accessing
base class constructor
&=
#8211; 0-arg
constructor &ag=
rave;
called automatically
&=
#8211; Other
constructors &a=
grave; must
put in initializer list
=
8226; Accessing
base class methods
R=
11; Base::method()
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0007_image010.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0014.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Dynamic Dispatch
R=
26; class P=
erson
{
R=
26; …=
R=
26; void print() {
R=
26; …=
R=
26; class S=
tudent
: public Person {
R=
26; …=
R=
26; void print() {
R=
26; …=
R=
26; Person =
*p =3D
new Student();
R=
26; p->p=
rint();
• Which method gets
called?
– R=
egular
dispatch: Person::Print()
– D=
ynamic
dispatch: Student::Print()
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0014_image011.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0015.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
C++ and Java Dispatch
• Default Dispatch
<=
/span>
– Java: Dynamic
– C++: Regular
• Must declare methods <=
span
style=3D'font-family:"Courier New";color:#339933'>virtual to=
get
dynamic
• Only declare this way =
in
class definition
• Big Problem with C++
default
– Destructors must be
declared virtual
• Else deleting base cla=
ss
pointer can cause leak!
– Automatically created
destructor isn't virtual!
•
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0015_image012.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0016.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Inheritance and the "Big
Three"
• Inherited Component is
like a data member
• Constructors (Copy and
0-arg)
– Base class constructor=
is
called first
– Then constructors call=
ed
on data members
• Operator=3D
– Analagous to
constructors
• Destructor
=
– Memory for derived cla=
ss
freed
– Destructor for base cl=
ass
called
•
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0016_image013.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0018.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Slicing
• Person p =3D Student();
•<=
/span>
• Casting stack-based
objects causes slicing
– Data in derived class
lost
– If objects inherit, use
pointers or references
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0018_image014.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0017.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Dynamic casts
• Person *p1 =3D new Student();
• Person *p2 =3D new Teacher();
•
• Student *s1 =3D (Student*)p1;  =
;
//Fine
• Student *s2 =3D (Student*)p2;  =
;
//Subtle bugs
=
• Student *s3 =3D dynamic_cast<Student*>(p1); //=
Fine
• Student *s4 =3D dynamic_cast<Student*>(p2); //=
s4 =3D=3D
NULL
•
• Casting up the inherit=
ance
tree works
– But if cast fails, can
introduce subtle bugs
– dynamic_cast returns NULL if cast fails
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0017_image015.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0020.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Other
Differences we won't cover
• Declaring abstract
classes
• No "Interfaces&qu=
ot;
in C++
– Can us Multiple
Inheritance instead
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0020_image016.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0013.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Summary
• C++ Inheritance is very
similar to Java
• Big Gotchas
– Methods are non-virtua=
l by
default
– Declare destructors
virtual
– Slicing
• Want Java semantics for
objects?
– Make every
(non-constructor) method virtual
– Only allocate objects
using new
– Access all objects thr=
ough
pointers
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0013_image017.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0019.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
Reading
=
8226; C++
for Java Programmers
&=
#8211; Chapter
6: OO Programming: Inheritance
&=
#8226; Skip
6.4, 6.8, and 6.9
&=
#8226; 6.10
Recommended
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0019_image018.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0003.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
11/27/2006
CSE 303 Lecture 21
17
Next Time
=
8226; Societal
Implications
&=
#8211; DRM
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/slide0003_image019.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/master01.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
<=
/div>
<=
/div>
<=
/div>
<=
/div>
Click to edit Master text styles
Second level
Third level
Fourth level
Fifth level
<=
/div>
<=
/div>
<=
/div>
<=
/div>
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/master03_stylesheet.css
Content-Transfer-Encoding: base64
Content-Type: text/css
Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt
ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt
c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln
bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiM5OTAwMDA7DQoJZm9udC1zaXpl
OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx
Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246
bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k
ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut
b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou
QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr
Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0
OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN
Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z
by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K
CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K
CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93
OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl
eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t
Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0
XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj
b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250
LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250
LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt
YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s
b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv
cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy
LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m
b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl
Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z
by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt
YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13
cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K
CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv
LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv
bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQg0KCXtjb2xvcjojOTkw
MDAwOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMg0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIzDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjQNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCDQoJe2NvbG9yOiM5OTAwMDA7
DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMQ0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIyDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCNA0KCXttc28tY2hhci13cmFw
OjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouVGJsDQoJe2NvbG9yOiM5OTAwMDA7DQoJ
bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDENCgl7bXNv
LWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDINCgl7bXNvLWNo
YXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLmRlZmF1bHRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5kZWZhdWx0DQoJe3RleHQtYWxpZ246bGVmdDsNCglm
b250LWZhbWlseTpBcmlhbDsNCglmb250LXdlaWdodDpub3JtYWw7DQoJZm9udC1zdHlsZTpub3Jt
YWw7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJdGV4dC1zaGFkb3c6bm9uZTsNCgl0ZXh0LWVm
ZmVjdDpub25lOw0KCW1zby1mYXJlYXN0LWhpbnQ6bm87DQoJbGF5b3V0LWZsb3c6aG9yaXpvbnRh
bDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6ODUlOw0K
CW1zby10ZXh0LXJhaXNlOjAlOw0KCW1zby1saW5lLXNwYWNpbmc6IjEwMCAwIDAiOw0KCW1zby1t
YXJnaW4tbGVmdC1hbHQ6MDsNCgltc28tdGV4dC1pbmRlbnQtYWx0OjA7DQoJbXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7DQoJZGlyZWN0aW9uOmx0cjsNCgltc28td29y
ZC13cmFwOjE7DQoJbXNvLXZlcnRpY2FsLWFsaWduLXNwZWNpYWw6YmFzZWxpbmU7DQoJbXNvLWFu
c2ktbGFuZ3VhZ2U6RU4tVVM7fQ0KYTpsaW5rDQoJe2NvbG9yOiMwMDk5OTkgIWltcG9ydGFudDt9
DQphOmFjdGl2ZQ0KCXtjb2xvcjojMzMzMzk5ICFpbXBvcnRhbnQ7fQ0KYTp2aXNpdGVkDQoJe2Nv
bG9yOiM5OUNDMDAgIWltcG9ydGFudDt9DQp=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/master04_stylesheet.css
Content-Transfer-Encoding: base64
Content-Type: text/css
Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt
ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt
c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln
bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiMwMDAwOTk7DQoJZm9udC1zaXpl
OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx
Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246
bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k
ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut
b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou
QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr
Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0
OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN
Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z
by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K
CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K
CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93
OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl
eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t
Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0
XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj
b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250
LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250
LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt
YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s
b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv
cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy
LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m
b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl
Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z
by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt
YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6IzAwMDA5OTsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13
cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K
CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv
LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv
bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQg0KCXtjb2xvcjojMDAw
MDk5Ow0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMg0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIzDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjQNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCDQoJe2NvbG9yOiMwMDAwOTk7
DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMQ0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIyDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCNA0KCXttc28tY2hhci13cmFw
OjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouVGJsDQoJe2NvbG9yOiMwMDAwOTk7DQoJ
bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDENCgl7bXNv
LWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDINCgl7bXNvLWNo
YXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLmRlZmF1bHRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5kZWZhdWx0DQoJe3RleHQtYWxpZ246bGVmdDsNCglm
b250LWZhbWlseTpBcmlhbDsNCglmb250LXdlaWdodDpub3JtYWw7DQoJZm9udC1zdHlsZTpub3Jt
YWw7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJdGV4dC1zaGFkb3c6bm9uZTsNCgl0ZXh0LWVm
ZmVjdDpub25lOw0KCW1zby1mYXJlYXN0LWhpbnQ6bm87DQoJbGF5b3V0LWZsb3c6aG9yaXpvbnRh
bDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6ODUlOw0K
CW1zby10ZXh0LXJhaXNlOjAlOw0KCW1zby1saW5lLXNwYWNpbmc6IjEwMCAwIDAiOw0KCW1zby1t
YXJnaW4tbGVmdC1hbHQ6MDsNCgltc28tdGV4dC1pbmRlbnQtYWx0OjA7DQoJbXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7DQoJZGlyZWN0aW9uOmx0cjsNCgltc28td29y
ZC13cmFwOjE7DQoJbXNvLXZlcnRpY2FsLWFsaWduLXNwZWNpYWw6YmFzZWxpbmU7DQoJbXNvLWFu
c2ktbGFuZ3VhZ2U6RU4tVVM7fQ0KYTpsaW5rDQoJe2NvbG9yOiMwMDk5OTkgIWltcG9ydGFudDt9
DQphOmFjdGl2ZQ0KCXtjb2xvcjojMzMzMzk5ICFpbXBvcnRhbnQ7fQ0KYTp2aXNpdGVkDQoJe2Nv
bG9yOiM5OUNDMDAgIWltcG9ydGFudDt9DQp=
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/script.js
Content-Transfer-Encoding: quoted-printable
Content-Type: application/javascript; charset="us-ascii"
function LoadSld()
{
var sld=3DGetObj("SlideObj")
if( !g_supportsPPTHTML ) { =09
sld.style.visibility=3D"visible"
return
}
if( MakeNotesVis() ) return
runAnimations =3D _InitAnimations();
=09
if( IsWin("PPTSld") )
parent.SldUpdated(GetSldId())
g_origSz=3DparseInt(SlideObj.style.fontSize)
g_origH=3Dsld.style.posHeight
g_origW=3Dsld.style.posWidth
g_scaleHyperlinks=3D(document.all.tags("AREA").length>0)
if( g_scaleHyperlinks )
InitHLinkArray()
if( g_scaleInFrame||(IsWin("PPTSld") && parent.IsFullScrMode() ) )
document.body.scroll=3D"no"
_RSW()
if( IsWin("PPTSld") && parent.IsFullScrMode() )
FullScrInit();
=09
MakeSldVis();
ChkAutoAdv()
if( runAnimations )
{
if( document.all("NSPlay") )
document.all("NSPlay").autoStart =3D false;
if( sld.filters && sld.filters.revealtrans )
setTimeout( "document.body.start()", sld.filters.revealtrans.duration * =
1000 );
else
document.body.start();
}
}
function MakeSldVis()=20
{
var fTrans=3Dg_showAnimation && SldHasTrans()
if( fTrans )=09
{
if( g_bgSound ) {
idx=3Dg_bgSound.indexOf(",");
pptSound.src=3Dg_bgSound.substr( 0, idx );
pptSound.loop=3D -(parseInt(g_bgSound.substr(idx+1)));
}
SlideObj.filters.revealtrans.Apply()=09
}
SlideObj.style.visibility=3D"visible"
if( fTrans )
SlideObj.filters.revealtrans.Play()
}
function MakeNotesVis()=20
{
if( !IsNts() ) return false=20
SlideObj.style.display=3D"none"
nObj =3D document.all.item("NotesObj")
parent.SetHasNts(0)
if( nObj ) {=20
nObj.style.display=3D""
parent.SetHasNts(1)
}
return 1
}
function ChkAutoAdv()
{
if(SldHasTrans())
SlideObj.onfilterchange=3DAutoAdv
else
AutoAdv()
}
function AutoAdv()
{
if(!IsWin("PPTSld") || !gUseSldTimings )return
var sld=3DGetCurSld()
if( (sld.mAdvDelay>0) && !parent.IsFramesMode() )
setTimeout("parent.GoToNextSld()",sld.mAdvDelay)
}
function GetObj(id)
{
if(g_supportsPPTHTML) return document.all(id);
else return document.getElementById(id);
}
function SldHasTrans() { return SlideObj.style.filter !=3D ""; }
function GetSldId()=20
{
var regExp =3D /file:\/\/\//i
var pos =3D location.href.search(regExp)
if (MHTMLPrefix !=3D "" && pos !=3D -1)
sId =3D location.href.substring(pos)
else
{
sId =3D RemoveFilePrefixFromHref(location.href);
var regExp =3D /\//
var fixedHref =3D sId
var pos =3D -1
=09
pos =3D fixedHref.search(regExp)
while (pos !=3D -1)
{
fixedHref =3D fixedHref.replace(regExp, "\\")
pos =3D fixedHref.search(regExp)
}
=09
if (g_fBaseHyperlink =3D=3D true)
sId =3D "file:///" + fixedHref;
else
sId =3D fixedHref.substring(fixedHref.lastIndexOf('\\') + 1)
}
=09
return sId
}
function HideMenu() { if( frames["PPTSld"] && PPTSld.document.all.item("ctx=
tmenu") && PPTSld.ctxtmenu.style.display!=3D"none" ) { PPTSld.ctxtmenu.styl=
e.display=3D'none'; return true } return false }
function IsWin( name ) { return window.name =3D=3D name }
function IsNts() { return IsWin("PPTNts") }
function IsSldOrNts() { return( IsWin("PPTSld")||IsWin("PPTNts") ) }
function SupportsPPTAnimation() { return( navigator.platform =3D=3D "Win32"=
&& navigator.appVersion.indexOf("Windows")>0 ) }
function SupportsPPTHTML()
{
var appVer=3Dnavigator.appVersion, msie=3DappVer.indexOf("MSIE "), ver=3D0
if( msie >=3D 0 )
ver=3DparseFloat( appVer.substring( msie+5, appVer.indexOf(";",msie) ) )
else
ver=3DparseInt(appVer)
return( ver >=3D 4 && msie >=3D 0 )
}
function _RSW()
{
if( !g_supportsPPTHTML || IsNts() ||
( !g_scaleInFrame && (!IsWin("PPTSld") || !parent.IsFullScrMode()) ) )
return
var padding=3D0;
if( IsWin("PPTSld") && parent.IsFramesMode() ) padding=3D6
cltWidth=3Ddocument.body.clientWidth-padding
cltHeight=3Ddocument.body.clientHeight-padding
factor=3D(1.0*cltWidth)/g_origW
if( cltHeight < g_origH*factor )
factor=3D(1.0*cltHeight)/g_origH
newSize =3D g_origSz * factor
if( newSize < 1 ) newSize=3D1
s=3DSlideObj.style
s.fontSize=3DnewSize+"px"
s.posWidth=3Dg_origW*factor
s.posHeight=3Dg_origH*factor
s.posLeft=3D(cltWidth-s.posWidth+padding)/2
s.posTop=3D(cltHeight-s.posHeight+padding)/2
if( g_scaleHyperlinks )
ScaleHyperlinks( factor )
}
function _InitAnimations()
{
animRuntimeInstalled =3D ''+document.body.localTime !=3D 'undefined';
isFullScreen =3D (window.name =3D=3D "PPTSld") && !parent.IsFramesMode();
g_animUseRuntime =3D g_showAnimation && animRuntimeInstalled && !(isFullSc=
reen && parent.IsSldVisited());
if( g_animUseRuntime ) {
collSeq =3D document.all.tags("seq");
if( collSeq !=3D null ) {
for(ii=3D0;ii
numSlds )
gSldJumpIdx =3D numSlds;
if ( gSldJumpIdx >=3D 0 ) {
if ( gSldJumpIdx =3D=3D 0 )
gSldJumpIdx =3D 1;
var jumpTo =3D parseInt(gSldJumpIdx);
gSldJump =3D 0; gSldJumpIdx =3D "";
win.GoToSld( parent.GetSldList().mList[jumpTo-1].mSldHref )
}
}
}
function _KDH()
{
if( event.keyCode =3D=3D 8 ) {
event.returnValue =3D 0;
parent.GoToPrevSld();
}
}
function DocumentOnClick()
{
if( IsNts() || parent.HideMenu() ) return;
if( ( g_allowAdvOnClick && !parent.IsFramesMode() ) ||
(event && (event.keyCode=3D=3D32) ) )
parent.GoToNextSld();
}
var g_supportsPPTHTML =3D SupportsPPTHTML(), g_scaleInFrame =3D 1, gId=3D""=
, g_bgSound=3D"",
g_scaleHyperlinks =3D false, g_allowAdvOnClick =3D 1, g_showInBrowser =
=3D 0, gLoopCont =3D 0, gUseSldTimings =3D 1;
var g_showAnimation =3D g_supportsPPTHTML && SupportsPPTAnimation() && ( (w=
indow.name=3D=3D"PPTSld" && !parent.IsFramesMode()) || g_showInBrowser );va=
r g_animManager =3D null;
var g_animUseRuntime =3D false;
var g_animItemsToHide, g_animInteractiveItems, g_animSlideTime;
var g_animMainSequence =3D null;
var ENDSHOW_MESG=3D"End of slide show, click to exit.", SCREEN_MODE=3D"Fram=
es", gIsEndShow=3D0, NUM_VIS_SLDS=3D17, SCRIPT_HREF=3D"script.js", FULLSCR_=
HREF=3D"fullscreen.htm";
var gCurSld =3D gPrevSld =3D 1, g_offset =3D 0, gNtsOpen =3D gHasNts =3D gO=
tlTxtExp =3D 0, gHasNarration =3D 0, gOtlOpen =3D true
window.gPPTHTML=3DSupportsPPTHTML()
var g_fBaseHyperlink =3D false;
var gMainDoc=3Dnew Array(new hrefList("slide0001.htm",1,-1,1),new hrefList(=
"slide0004.htm",1,-1,1),new hrefList("slide0006.htm",1,-1,1),new hrefList("=
slide0008.htm",1,-1,1),new hrefList("slide0011.htm",1,-1,1),new hrefList("s=
lide0009.htm",1,-1,1),new hrefList("slide0010.htm",1,-1,1),new hrefList("sl=
ide0007.htm",1,-1,1),new hrefList("slide0014.htm",1,-1,1),new hrefList("sli=
de0015.htm",1,-1,1),new hrefList("slide0016.htm",1,-1,1),new hrefList("slid=
e0018.htm",1,-1,1),new hrefList("slide0017.htm",1,-1,1),new hrefList("slide=
0020.htm",1,-1,1),new hrefList("slide0013.htm",1,-1,1),new hrefList("slide0=
019.htm",1,-1,1),new hrefList("slide0003.htm",1,-1,1));
/*********************************************
Frameset functions
These functions control slide navigation
and state of the frameset.
**********************************************/
function RemoveFilePrefixFromHref(href)
{
var regExp =3D /^file:\/\/\//i;
return href.replace(regExp, "")
}
function FullScrInit()
{
g_allowAdvOnClick =3D GetCurSld().mAdvOnClk
document.body.style.backgroundColor=3D"black"
document.oncontextmenu=3Dparent._CM;
document.onkeydown =3D _KDH;
document.ondragstart=3DCancel
document.onselectstart=3DCancel
self.focus()
}
function Redirect( frmId )
{=09
var str=3Ddocument.location.hash,idx=3Dstr.indexOf('#'), sId=3DGetSldId()
if(idx>=3D0) str=3Dstr.substr(1);
if( window.name !=3D frmId && ( sId !=3D str) ) {
obj =3D GetObj("Main-File")
window.location.href=3Dobj.href+"#"+sId
return 1
}
return 0
}
var MHTMLPrefix =3D CalculateMHTMLPrefix();=20
function CalculateMHTMLPrefix()
{
if ( document.location.protocol =3D=3D 'mhtml:') {=20
href=3Dnew String(document.location.href)=20
Start=3Dhref.indexOf('!')+1=20
End=3Dhref.lastIndexOf('/')+1=20
if (End < Start)=20
return href.substring(0, Start)=20
else=20
return href.substring(0, End)=20
}
return '';
}
function GetTags(base,tag)
{
if(g_supportsPPTHTML) return base.all.tags(tag);
else return base.getElementsByTagName(tag);
}
function UpdNtsPane(){ if(frames["PPTNts"]) PPTNts.location.replace( MHTMLP=
refix+GetHrefObj( gCurSld ).mNtsHref ) }
function UpdNavPane( sldIndex ){ if(gNavLoaded) PPTNav.UpdNav() }
function UpdOtNavPane(){ if(gOtlNavLoaded) PPTOtlNav.UpdOtlNav() }
function UpdOtlPane(){ if(gOtlLoaded) PPTOtl.UpdOtl() }
function SetHasNts( fVal )
{
if( gHasNts !=3D fVal ) {
gHasNts=3DfVal
UpdNavPane()
}
}
function ToggleOtlText()
{
gOtlTxtExp=3D!gOtlTxtExp
UpdOtlPane()
}
function ClearMedia()
{
// Clear any sounds playing before launching another browser window. Other=
wise,
// in fullscreen mode, you'll continue to hear the sound in the frames mod=
e.
if (PPTSld.pptSound) PPTSld.pptSound.loop =3D 0;
}
function FullScreen()
{=20
if ( PPTSld.g_animUseRuntime )
PPTSld.document.body.pause();
ClearMedia();
var href =3D ( document.location.protocol =3D=3D 'mhtml:') ? FULLSCR_HREF =
: FULLSCR_HREF+"#"+GetHrefObj(gCurSld).mSldHref;
if (MHTMLPrefix !=3D "")
href =3D RemoveFilePrefixFromHref(href)
if(PPTNav.event.ctrlKey) {
var w =3D (window.screen.availWidth * 1.0) / 2.0
var h =3D w * (PPTSld.g_origH * 1.0) / PPTSld.g_origW
win =3D window.open( MHTMLPrefix+href,null,"toolbar=3D0,resizable=3D1,top=
=3D0,left=3D0," + "width=3D"+ w + ",height=3D" + h );
if( win.document.body && PPTSld.g_animUseRuntime )
win.document.body.PPTSldFrameset=3Dwindow;
}
else
{
win =3D window.open( MHTMLPrefix+href,null,"fullscreen=3Dyes" );
if( win.document.body && PPTSld.g_animUseRuntime )
win.document.body.PPTSldFrameset=3Dwindow;
}
}
function ToggleVNarration()
{
rObj=3DPPTSld.document.all("NSPlay")
if( rObj && !PPTSld.g_animUseRuntime ) {
if( (rObj.playState =3D=3D 1)||(rObj.playState =3D=3D 0) )
rObj.Play()
else if( rObj.playState =3D=3D 2 )
rObj.Pause()
else
return;
}
else if( PPTSld.g_animUseRuntime )
{
narObj =3D PPTSld.document.all("narrationID")
if( narObj )
narObj.togglePause()
}
}
function GetCurSldNum()
{ =20
obj=3DGetHrefObj(gCurSld)
if( obj.mOrigVis =3D=3D 1 )
return obj.mSldIdx
else =20
return gCurSld
}
function GetNumSlds()
{ =20
if( GetHrefObj(gCurSld).mOrigVis =3D=3D 1 )
return GetSldList().mNumVisSlds;
else
return GetSldList().mList.length
}
function GetSldNum( href )
{
for(ii=3D0; ii 1 )
PopSldList();
else if( !IsFramesMode() ) {
if( gLoopCont )
GoToFirst()
else
EndShow()
}
}
function GoToPrevSld()
{
ii=3DgCurSld-1
if( ii > 0 ) {
obj=3DGetHrefObj(ii)
while ( obj && ( obj.mVis =3D=3D 0 ) && ( ii>0 ) )
obj=3DGetHrefObj(--ii)
if( ii =3D=3D 0 ) ii=3D1
GoToSldNum(ii)
}
}
function GoToFirst(){ GoToSld( GetHrefObj(1).mSldHref ) }
function GoToLast()
{
ii=3DGetSldList().mList.length
if( ii !=3D gCurSld )
GoToSld( GetHrefObj(ii).mSldHref )
}
function GoToSldNum( num )
{
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
obj =3D GetHrefObj( num )
obj.mVis=3D1
gPrevSld=3DgCurSld
gCurSld =3D num;
=09
if (MHTMLPrefix !=3D "")
PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(obj.mSldHref=
))
else
PPTSld.location.replace(obj.mSldHref)
=09
if( IsFramesMode() ) {
UpdNavPane(); UpdOtlPane(); UpdNtsPane()
}
}
function GoToSld( href )
{
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
GetHrefObj( GetSldNum(href) ).mVis=3D1
if (MHTMLPrefix !=3D "")
PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(href))
else
PPTSld.location.replace(href)
}
function SldUpdated( id )
{
if( id =3D=3D GetHrefObj(gCurSld).mSldHref ) return
gPrevSld=3DgCurSld
gCurSld=3DGetSldNum(id)
if( IsFramesMode() ) {
UpdNavPane(); UpdOtlPane(); UpdNtsPane()
}
}
function PrevSldViewed(){ GoToSld( GetHrefObj(gPrevSld).mSldHref ) }
function HasPrevSld() { return ( gIsEndShow || ( gCurSld !=3D 1 && GetHrefO=
bj( gCurSld-1 ).mVis =3D=3D 1 )||( GetCurSldNum() > 1 ) ) }
function HasNextSld() { return (GetCurSldNum() !=3D GetNumSlds()) }
function CloseWindow() {
if( HideMenu() ) return;
=09
var event =3D PPTSld.event;
if( !IsFramesMode() && event && (event.keyCode=3D=3D27 || event.keyCode=3D=
=3D32 || event.type=3D=3D"click" ) )
window.close( self );
CatchNumKeys( self, event );
}
function Unload() { gIsEndShow=3D0; }
function SetupEndShow() {
gIsEndShow=3D1;
PPTSld.document.body.scroll=3D"no";
PPTSld.document.onkeypress=3DCloseWindow;
PPTSld.document.onclick=3DCloseWindow;
PPTSld.document.oncontextmenu=3D_CM;
}
function EndShow()
{
if( IsFramesMode() ) return
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
doc=3DPPTSld.document
var dir =3D doc.body.dir
if( dir !=3D "rtl" ) dir =3D "ltr";
doc.open()
doc.writeln('' + ENDSHOW_MESG + '
=
body>')
doc.close()
}
function SetSldVisited(){ GetSldList().mList[gCurSld-1].mVisited=3Dtrue }
function IsSldVisited(){ return GetSldList().mList[gCurSld-1].mVisited }
function hrefList( sldHref, visible, advDelay, advClk )
{
this.mSldHref=3D this.mNtsHref =3D sldHref
this.mOrigVis=3D this.mVis =3D visible
this.mVisited=3D false
this.mAdvDelay=3D advDelay
this.mAdvOnClk=3D advClk
}
function SldList(arr,curSld,fEnd)
{
this.mCurSld =3D curSld;
this.mList =3D new Array();
var idx =3D 1;
for(ii=3D0;ii 0) {
PushSldList(sldList,fEnd);
gCurSld =3D 1;
}
else
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
}
function PushSldList(arr,fEnd) {
var ii =3D gSldStack.length;
gSldStack[ii] =3D new SldList(arr,gCurSld,fEnd);
GoToSld( gSldStack[ii].mList[0].mSldHref );
}
function PopSldList() {
if (gSldStack[gSldStack.length-1].fEndShow)
EndShow()
else {
gCurSld =3D gSldStack[gSldStack.length-1].mCurSld;
gSldStack[gSldStack.length-1] =3D null;
gSldStack.length--;
var sldList =3D gSldStack[gSldStack.length-1];
GoToSld( sldList.mList[gCurSld - 1].mSldHref );
}
}
var custShowList=3Dnew Array();
/*********************************************
Navigation button implementation
There are 2 types of buttons: ImgBtn, TxtBtn
implemented as function objects. They share
a similiar interface so the event handlers
can call SetActive, for example, on a button=20
object without needing to know exactly=20
what type of button it is.
**********************************************/
//----------------------------------
function ImgBtn( oId,bId,w,action )
//----------------------------------
{
var t=3Dthis
t.Perform =3D _IBP
t.SetActive =3D _IBSetA
t.SetInactive=3D _IBSetI
t.SetPressed =3D _IBSetP
t.SetDisabled=3D _IBSetD
t.Enabled =3D _IBSetE
t.ChangeIcon =3D null
t.UserAction =3D action
t.ChgState =3D _IBUI
t.mObjId =3D oId
t.mBorderId=3D bId
t.mWidth =3D w
t.mIsOn =3D t.mCurState =3D 0
}
function _IBSetA()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 )
obj.style.posTop=3D0
}
}
function _IBSetI()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 )
obj.style.posTop=3D0=20
}
}
function _IBSetP()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gShadowClr,gHiliteClr,2 )
obj.style.posLeft+=3D1; obj.style.posTop+=3D1
}
}
function _IBSetD()
{ =20
obj=3Dthis.ChgState( gFaceClr,gFaceClr,0 )
obj.style.posTop=3D0=20
}
function _IBSetE( state )
{
var t=3Dthis
GetObj( t.mBorderId ).style.visibility=3D"visible"
if( state !=3D t.mIsOn ) {
t.mIsOn=3Dstate
if( state )
t.SetInactive()
else
t.SetDisabled()
}
}
function _IBP()
{
var t=3Dthis
if( t.mIsOn ) {
if( t.UserAction !=3D null )
t.UserAction()
if( t.ChangeIcon ) {
obj=3DGetObj(t.mObjId)
if( t.ChangeIcon() )
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-4)*t.mWidth
else
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-0)*t.mWidth
}
t.SetActive()
} =20
}
function _IBUI( clr1,clr2,nextState )
{
var t=3Dthis
SetBorder( GetObj( t.mBorderId ),clr1,clr2 )
obj=3DGetObj( t.mObjId )
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-nextState)*t.mWidth-obj=
.style.posTop
t.mCurState=3DnextState
return obj
}
//-----------------------------------------
function TxtBtn( oId,oeId,action,chkState )
//-----------------------------------------
{
var t=3Dthis
t.Perform =3D _TBP
t.SetActive =3D _TBSetA
t.SetInactive=3D _TBSetI
t.SetPressed =3D _TBSetP
t.SetDisabled=3D _TBSetD
t.SetEnabled =3D _TBSetE
t.GetState =3D chkState
t.UserAction =3D action
t.ChgState =3D _TBUI
t.mObjId =3D oId
t.m_elementsId=3D oeId
t.mIsOn =3D 1
}
function _TBSetA()
{
var t=3Dthis
if( t.mIsOn && !t.GetState() )
t.ChgState( gHiliteClr,gShadowClr,0,0 )
}
function _TBSetI()
{
var t=3Dthis
if( t.mIsOn && !t.GetState() )
t.ChgState( gFaceClr,gFaceClr,0,0 )
}
function _TBSetP()
{
if( this.mIsOn )
this.ChgState( gShadowClr,gHiliteClr,1,1 )
}
function _TBSetD()
{ =20
this.ChgState( gFaceClr,gFaceClr,0,0 )
this.mIsOn =3D 0
}
function _TBSetE()
{
var t=3Dthis
if( !t.GetState() )
t.ChgState( gFaceClr,gFaceClr,0,0 )
else
t.ChgState( gShadowClr,gHiliteClr,1,1 )
t.mIsOn =3D 1
}
function _TBP()
{
var t=3Dthis
if( t.mIsOn ) {=20
if( t.UserAction !=3D null )
t.UserAction()
if( !t.GetState )
return
if( t.GetState() )
t.SetPressed()
else
t.SetActive()
} =20
}
function _TBUI( clr1,clr2,lOffset,tOffset )
{
SetBorder( GetObj( this.mObjId ),clr1,clr2 )
Offset( GetObj( this.m_elementsId ),lOffset,tOffset )
}
function Offset( obj, top, left ){ obj.style.top=3Dtop; obj.style.left=3Dle=
ft }
function SetBorder( obj, upperLeft, lowerRight )
{
s=3Dobj.style;
s.borderStyle =3D "solid"
s.borderWidth =3D 1=20
s.borderLeftColor =3D s.borderTopColor =3D upperLeft
s.borderBottomColor=3D s.borderRightColor =3D lowerRight
}
function GetBtnObj(){ return gBtnArr[window.event.srcElement.id] }
function BtnOnOver(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetActive() }
function BtnOnDown(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetPressed() }
function BtnOnOut(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetInactive() }
function BtnOnUp()
{
b=3DGetBtnObj()
if( b !=3D null )
b.Perform()
else
Upd()
}
function GetNtsState(){ return parent.gNtsOpen }
function GetOtlState(){ return parent.gOtlOpen }
function GetOtlTxtState(){ return parent.gOtlTxtExp }
function NtsBtnSetFlag( fVal )
{
s=3Ddocument.all.item( this.m_flagId ).style
s.display=3D"none"
if( fVal )
s.display=3D""
else
s.display=3D"none"
}
function _BSetA_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etActive() }
function _BSetI_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etInactive() }
function _BSetP_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etPressed() }
function _BSetA_BorderImg()
{=20
b =3D gBtnArr[this.mBorderId]=20
if( b !=3D null && this.mIsOn && !b.GetState() ) {
obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 )
obj.style.posTop=3D0
}
}
function _BSetI_BorderImg()
{=20
b =3D gBtnArr[this.mBorderId]
if( b !=3D null && this.mIsOn && !b.GetState() ) {
obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 )
obj.style.posTop=3D0
}
}
var gHiliteClr=3D"THREEDHIGHLIGHT",gShadowClr=3D"THREEDSHADOW",gFaceClr=3D"=
THREEDFACE"
var gBtnArr =3D new Array()
gBtnArr["nb_otl"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOtlPan=
e,GetOtlState )
gBtnArr["nb_otlElem"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOt=
lPane,GetOtlState )
gBtnArr["nb_nts"] =3D new ImgBtn( "nb_nts","nb_ntsBorder",10,parent.ToggleN=
tsPane )
gBtnArr["nb_nts"].SetActive =3D _BSetA_BorderImg;
gBtnArr["nb_nts"].SetInactive =3D _BSetI_BorderImg;
gBtnArr["nb_ntsBorder"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.=
ToggleNtsPane,GetNtsState )
gBtnArr["nb_ntsElem"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.To=
ggleNtsPane,GetNtsState )
gBtnArr["nb_prevBorder"] =3D gBtnArr["nb_prev"]=3D new ImgBtn( "nb_prev","n=
b_prevBorder",30,parent.GoToPrevSld )
gBtnArr["nb_nextBorder"] =3D gBtnArr["nb_next"]=3D new ImgBtn( "nb_next","n=
b_nextBorder",30,parent.GoToNextSld )
gBtnArr["nb_sldshw"]=3D new ImgBtn( "nb_sldshw","nb_sldshwBorder",18,parent=
.FullScreen )
gBtnArr["nb_sldshwBorder"] =3D new TxtBtn( "nb_sldshw","nb_sldshwBorder",pa=
rent.FullScreen,null )
gBtnArr["nb_sldshwBorder"].SetActive =3D _BSetA_Border;
gBtnArr["nb_sldshwBorder"].SetInactive =3D _BSetI_Border;
gBtnArr["nb_sldshwText"] =3D new TxtBtn( "nb_sldshw","nb_sldshwText",parent=
.FullScreen,null )
gBtnArr["nb_sldshwText"].SetActive =3D _BSetA_Border;
gBtnArr["nb_sldshwText"].SetInactive =3D _BSetI_Border;
gBtnArr["nb_voice"] =3D gBtnArr["nb_voiceBorder"] =3D new ImgBtn( "nb_voice=
","nb_voiceBorder",18,parent.ToggleVNarration )
gBtnArr["nb_otlTxtBorder"] =3D gBtnArr["nb_otlTxt"]=3D new ImgBtn( "nb_otlT=
xt","nb_otlTxtBorder",23,parent.ToggleOtlText )
gBtnArr["nb_ntsBorder"].m_flagId=3D "nb_nts"
gBtnArr["nb_ntsBorder"].SetFlag =3D NtsBtnSetFlag
gBtnArr["nb_otlTxt"].ChangeIcon=3D GetOtlTxtState
/*********************************************
Context menu implementation
_CM() is the function that's hooked up to
the oncontextmenu event. Once we're asked to
show the menu, we first build it by creating
DIVs on-the-fly. Then we position it=20
within the screen area so it doesn't get
clipped.
Creating the DIVs using createElement() means
we don't have to write out any extra HTML
into the slide HTML files.
**********************************************/
var sNext=3D"Next",sPrev=3D"Previous",sEnd=3D"End Show",sFont=3D"Arial",sAr=
row=3D"Arrow",sFreeform=3D"Freeform",sRect=3D"Rectangle",sOval=3D"Oval"
function ShowMenu()
{
BuildMenu();
var doc=3DPPTSld.document.body,x=3DPPTSld.event.clientX+doc.scrollLeft,y=
=3DPPTSld.event.clientY+doc.scrollTop
m =3D PPTSld.document.all.item("ctxtmenu")
m.style.pixelLeft=3Dx
if( (x+m.scrollWidth > doc.clientWidth)&&(x-m.scrollWidth > 0) )
m.style.pixelLeft=3Dx-m.scrollWidth
m.style.pixelTop=3Dy
if( (y+m.scrollHeight > doc.clientHeight)&&(y-m.scrollHeight > 0) )
m.style.pixelTop=3Dy-m.scrollHeight
m.style.display=3D""
}
function _CM()
{
if( !parent.IsFullScrMode() ) return;
if(!PPTSld.event.ctrlKey) {
ShowMenu()
return false
} else
HideMenu()
}
function BuildMenu()
{
if( PPTSld.document.all.item("ctxtmenu") ) return
var mObj=3DCreateItem( PPTSld.document.body )
mObj.id=3D"ctxtmenu"
mObj.style.visibility=3D"hidden"
var s=3DmObj.style
s.position=3D"absolute"
s.cursor=3D"default"
s.width=3D"120px"
SetCMBorder(mObj,"menu","black")
var iObj=3DCreateItem( mObj )
SetCMBorder( iObj, "threedhighlight","threedshadow" )
iObj.style.padding=3D2
CreateMenuItem( iObj,sNext,M_GoNextSld,M_True )
CreateMenuItem( iObj,sPrev,M_GoPrevSld,M_HasPrevSld )
=09
CreateSeparator( iObj )
CreateMenuItem( iObj,sEnd,M_End,M_True )
mObj.style.visibility=3D"visible"
}
function Cancel() { window.event.cancelBubble=3Dtrue; window.event.returnVa=
lue=3Dfalse }
function Highlight() { ChangeClr("activecaption","threedhighlight") }
function Deselect() { ChangeClr("threedface","menutext") }
function Perform()
{
e=3DPPTSld.event.srcElement
if( e.type=3D=3D"menuitem" && e.IsActive() )
e.Action()
else
PPTSld.event.cancelBubble=3Dtrue
}
function ChangeClr( bg,clr )
{
e=3DPPTSld.event.srcElement
if( e.type=3D=3D"menuitem" && e.IsActive() ) {
e.style.backgroundColor=3Dbg
e.style.color=3Dclr
}
}
function M_HasPrevSld() { return( parent.HasPrevSld() ) }
function M_GoNextSld() { if( gIsEndShow ) M_End(); else GoToNextSld() }
function M_GoPrevSld() { if( gIsEndShow ) { gIsEndShow=3D0; history.back();=
PPTSld.event.cancelBubble=3Dtrue; } else GoToPrevSld() }
function M_True() { return true }
function M_End() { window.close( self ) }
function CreateMenuItem( node,text,action,eval )
{
var e=3DCreateItem( node )
e.type=3D"menuitem"
e.Action=3Daction
e.IsActive=3Deval
e.innerHTML=3Dtext
if( !e.IsActive() )
e.style.color=3D"threedshadow"
e.onclick=3DPerform
e.onmouseover=3DHighlight
e.onmouseout=3DDeselect
s=3De.style;
s.fontFamily=3DsFont
s.fontSize=3D"9pt"
s.paddingLeft=3D2
}
function CreateSeparator( node )
{
var sObj=3DCreateItem( node )
SetCMBorder(sObj,"menu","menu")
var s=3DsObj.style
s.borderTopColor=3D"threedshadow"
s.borderBottomColor=3D"threedhighlight"
s.height=3D1
s.fontSize=3D"0px"
}
function CreateItem( node )
{
var elem=3DPPTSld.document.createElement("DIV")
node.insertBefore( elem )
return elem
}
function SetCMBorder( o,ltClr,rbClr )
{
var s=3Do.style
s.backgroundColor=3D"menu"
s.borderStyle=3D"solid"
s.borderWidth=3D1
s.borderColor=3DltClr+" "+rbClr+" "+rbClr+" "+ltClr
}
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/fullscreen.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/buttons.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhWAESAPf4AAAAAIAAAACAAICAAAAAgIAAgACAgICAgAQEBISEBASEBISEhAQEhMTExAQE
/KTM9Pz8/ERERPz8BAT8/KSkpGRkhMTcxCRkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAMDAwP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAPgALAAAAABYARIA
QAj/APEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGCEiQKCRo8YDIEHig2DxAD4LKD1avDDhgUuV
GUOGbHBR5QGYFBG4fHAB58EKECJEwCfUYAWPFGAygLCRKQIIUKM6WAohKUGgCikcFWh1INWoYKVS
7SrQ41GbIhGYLAuVQVOoC+IyXUuUAkG1HE3KFDhAwkgJc5/qDZmxsOHDiBMrXsy4sePDGyP7lChT
5MULmDPnlDw5YmW6FTNrfgi0aNGEZPEtbfo2bNTUpYeeRph69dPWrqvCNFuBIGG1A59CYPAVQtwF
cw0OxWdTIOiBCQAjaAB17fOFII8voGmRc+eOkilm/z9OvTtnjN4hYk1YoT3H2rnBOphPAB9skgq3
2lcaX/5YnJVt9BloAar12UEIRGCZdQghMABI1Tn32IQUVthYexhmqGGGMBHAgIfEhSiiiATAtOGJ
GnYI4ogsEldicAYOGNJGZaml3Y0L3NTZUBz1xlB0PUoUI0jlVWRSVN89xBKSGB1YU1TMoRfVBEle
hR9HQs1GEHxQ3RZZbveZthxt/LEmXHyp5XWABSCpaRJwbM13gAACPHVccgJFgF+NEhqUAEkQSCfc
ddhVhh5dVTaEAEsTUNlkZUWKN9BNGDE6QU8OrSdbllzpxyVTTrU21Uj3scfhp7nNpyoDaTIEJ3P9
If8J2kbLNYegg9JRBwGhFvbq66+ZUiDssMQWK2yHxiZLrInKNotss8l+B5yBrr5p2UIJvortANoC
6+234IbLla/elRtZjeamh5CC3Sb0YLvixivvYkDFGlZqBNh7r4n6goVvv6/ZlCicN+kL71ALTnpQ
dCIZp7CihkLA3UQmoWRBogyxtBPGCTnZncVR1rSTo5nuydC/Eo8kUH+lOoTyyvjoCuZu+PjYIKLD
rZybtrM1d10C0QXKEVz48GrQkEeWdFJKlbb0UmEeV0SzyC6RvNB646LWIVjUNeC1zAFb+RDKXksM
9r531bwmpQW9+hQDDsx5pqwDRWBXcFES2hc+gEn/wJGdEEWdE6LoWcoxQweaTNmkhydkKaYMYY2Q
p1unbLl/pPKbn3v7EZRvrKvqlja2ONvrtoIw9tn2g32/tQBlhtYkU+MNikZ7QYlPDPuMldpOmuJX
nVo5VF3HjI+q89mteX5IDd/fVFClma5kiE4f2XUJhlz09gj2NbTDRifkmu7zXjR++RVJ/lPznuvr
QH2iD6S+UewP9Dnon6d2NLwN8n90BB6hC68cFMCHoe+ACASP9c4DowUyEF0OPFcDI0ij/VXPaAKC
UfhS95AKGoQ7IBRICI1HwhGaUIQoLGEKT6jCFrLwhSuMoQtlCMMZ2rCGOKShDm+4wxzy8Ic+DGIP
B4cIRCKGMCAAOy==
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/frame.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 21
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/outline.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
No=
tes
1
Richard C. Davis
UW CSE – 11/27/2006
Lecture 21 – C++ Inheritance
2
Having a partner !=3D getting a free ride
You'll evaluate your partner at end of HW7
Work things out yourselves, if possible
This simulates real life
HW7 posted tomorrow
Discussion of Profilers postponed
You'll still have just over a week
3
Up to now
Linux/Shell scripting
C
C++
Tools for Developers
From now on
More C++ features
Other tool/development topics
4
C++ Inheritance
Concepts
Syntax
Semantics
5
6
Three types
public (most common and most Java-like)
protected
private
Public inheritance
public in base class à public in derived class
protected à
protected
private à n=
ot
accessible in derived class
Facilitates encapsulation (information hiding)
Protected data members accessible from
Member functions
Member functions of derived classes
7
class Student : public Person {
…
};
Class Student inherits from class Person
Student is called the derived class
Person is called the base class
8
Declaring derived classes
Use "public" instead of Java "extends"
Accessing base class constructor
0-arg constructor à
called automatically
Other constructors à must put in initializer list
Accessing base class methods
9
class Person {
…
void print() {<=
/li>
…
class Student : public Person {
…
void print() {<=
/li>
…
Person *p =3D new Student();
p->print();
Which method gets called?
Regular dispatch: Person::Print()
Dynamic dispatch: Student::Print()
10
Default Dispatch
Java: Dynamic
C++: Regular
Must declare methods virtual to get dynamic
Only declare this way in class definition
Big Problem with C++ default
Destructors must be declared virtual
Else deleting base class pointer can cause leak!
Automatically created destructor isn't virtual!
11
Inherited Component is like a data member
Constructors (Copy and 0-arg)
Base class constructor is called first
Then constructors called on data members
Operator=3D
Analagous to constructors
Destructor
Memory for derived class freed
Destructor for base class called
12
Person p =3D Student();
Casting stack-based objects causes slicing
Data in derived class lost
If objects inherit, use pointers or references
13
Person *p1 =3D new Student();
Person *p2 =3D new Teacher();
Student *s1 =3D (Student*)p1;  =
;
//Fine
Student *s2 =3D (Student*)p2;  =
;
//Subtle bugs
Student *s3 =3D dynamic_cast<Student*>(p1); //Fine
Student *s4 =3D dynamic_cast<Student*>(p2); //s4 =3D=3D NULL=
li>
Casting up the inheritance tree works
But if cast fails, can introduce subtle bugs
dynamic_cast returns NULL if cast fails
14
Declaring abstract classes
No "Interfaces" in C++
Can us Multiple Inheritance instead
15
C++ Inheritance is very similar to Java
Big Gotchas
Methods are non-virtual by default
Declare destructors virtual
Slicing
Want Java semantics for objects?
Make every (non-constructor) method virtual
Only allocate objects using new
Access all objects through pointers
16
C++ for Java Programmers
Chapter 6: OO Programming: Inheritance
Skip 6.4, 6.8, and 6.9
6.10 Recommended
17
------=_NextPart_01C71241.BCB80820
Content-Location: file:///C:/AF8A9A71/cse303-06au-lecture21_files/filelist.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71241.BCB80820--