0% found this document useful (0 votes)
268 views

Class Object Encapsulation Constructor Destructor Operator Overloading Inline Functions Friend Fuction References Self Assignment

Class provides a blueprint for objects with member variables and functions. Objects are instances of a class. Encapsulation puts a firewall around the class to prevent unauthorized access to private members. Constructors build objects and destructors destroy them, releasing resources in the reverse order of construction. Inline functions have their code inserted at the call site for efficiency.
Copyright
© © All Rights Reserved
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
268 views

Class Object Encapsulation Constructor Destructor Operator Overloading Inline Functions Friend Fuction References Self Assignment

Class provides a blueprint for objects with member variables and functions. Objects are instances of a class. Encapsulation puts a firewall around the class to prevent unauthorized access to private members. Constructors build objects and destructors destroy them, releasing resources in the reverse order of construction. Inline functions have their code inserted at the call site for efficiency.
Copyright
© © All Rights Reserved
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 45

CLASS

OBJECT
ENCAPSULATION
CONSTRUCTOR
DESTRUCTOR
OPERATOR OVERLOADING
INLINE FUNCTIONS
FRIEND FUCTION
REFERENCES
SELF ASSIGNMENT
CLASS
1. A FUNDAMENTAL BUILDING BLOCK OF OO SOFTWARE
2. DIFINES A DATA TYPE
3. TYPE WHICH CONSISTS OF BOTH A SET OF MEMBER
VARIABLES AND MEMBER FUNCTIONS
4. BLUEPRINT OR A TEMPLATE
5. DEFINES THE BEHAVOUR OF POSSIBLY MANY OBJECTS
(INSTANCES
6. THE MEMBERS AND BASE CLASSES OF A STRUCT ARE
PUBLIC BY DEFAULT! WHILE IN CLASS! THEY
DEFAULT TO PRIVATE.
7.
OBJECT
1. AN INSTANCE OF A CLASS
ENCAPSULATION
1. PREVENTING UNAUTHORI"ED ACCESS TO SOME PIECE
OF INFORMATION OR FUNCTIONALITY.
2. ENCAPSULATION PUTS A FIREWALL AROUND THE
CLASS! WHICH PREVENTS OTHER CLASSES FROM
ACCESSING THE VOLATILE PARTS (PRIVATE
3. IN C! ENCAPSULATION WAS ACCOMPLISHED BY MAKING
THINGS STATIC IN A COMPILATION UNIT OR MODULE.
THIS PREVENTED ANOTHER MODULE FROM ACCESSING
THE STATIC STUFF.
UNFORTUNATELY THIS APPROACH DOESN#T SUPPORT
MULTIPLE INSTANCES OF THE DATA! SINCE THERE IS
NO DIRECT SUPPORT FOR MAKING MULTIPLE
INSTANCES OF A MODULE#S STATIC DATA. IF
MULTIPLE INSTANCES WERE NEEDED IN C!
PROGRAMMERS TYPICALLY USED A STRUCT. BUT
UNFORTUNATELY C STRUCTS DON#T SUPPORT
ENCAPSULATION.
THIS E$ACERBATES THE TRADEOFF BETWEEN SAFETY
(INFORMATION HIDING AND USABILITY (MULTIPLE
INSTANCES.
IN C%%! YOU CAN HAVE BOTH MULTIPLE INSTANCES
AND ENCAPSULATION VIA A CLASS.
THE PUBLIC& PART OF A CLASS CONTAINS THE
CLASS#S INTERFACE! WHICH NORMALLY CONSISTS OF
THE CLASS#S PUBLIC& MEMBER FUNCTIONS AND ITS
FRIEND FUNCTIONS.
THE PRIVATE& AND'OR PROTECTED& PARTS OF A
CLASS CONTAIN THE CLASS#S IMPLEMENTATION!
WHICH IS TYPICALLY WHERE THE DATA LIVES.
THE END RESULT IS LIKE AN (ENCAPSULATED
STRUCT.( THIS REDUCES THE TRADEOFF BETWEEN
SAFETY (INFORMATION HIDING AND USABILITY
MULTIPLE INSTANCES.
4. ENCAPSULATION DOESN#T PREVENT PEOPLE FROM
KNOWING ABOUT THE INSIDE OF A CLASS) IT
PREVENTS THE CODE THEY WRITE FROM BECOMING
DEPENDENT ON THE INSIDES OF THE CLASS.
5. ENCAPSULATION NOT A SECURITY DEVICE.
ENCAPSULATION PREVENTS MISTAKES!NOT ESPIONAGE.
*.
REFERENCES
1. AN ALIAS (AN ALTERNATE NAME FOR AN OBJECT.
REFERENCES ARE FRE+UENTLY USED FOR PASS,BY,
REFERENCE
2. A REFERENCE IS THE OBJECT. IT IS NOT A
POINTER TO THE OBJECT! NOR A COPY OF THE
OBJECT. IT IS THE OBJECT.
3. A REFERENCE IS SIMILAR TO A CONST POINTER SUCH
AS INT- CONST P (AS OPPOSED TO A POINTER TO
CONST SUCH AS CONST INT- P.
4. REFERENCES TYPICALLY APPEAR ON THE SKIN OF AN
OBJECT! AND POINTERS ON THE INSIDE.
INLINE FUNCTIONS
1. AN INLINE FUNCTION IS A FUNCTION WHOSE CODE
GETS INSERTED INTO THE CALLER#S CODE STREAM.
LIKE A .DEFINE MACRO.
2. UNLIKE .DEFINE MACROS! INLINE FUNCTIONS AVOID
INFAMOUS MACRO ERRORS SINCE INLINE FUNCTIONS
ALWAYS EVALUATE EVERY ARGUMENT E$ACTLY ONCE
ALSO UNLIKE MACROS! ARGUMENT TYPES ARE
CHECKED! AND NECESSARY CONVERSIONS ARE
PERFORMED CORRECTLY.
3. WHEN YOU DEFINE AN INLINE FUNCTION! YOU
PREPEND THE FUNCTION#S DEFINITION WITH THE
KEYWORD INLINE! AND YOU PUT THE DEFINITION
INTO A HEADER FILE&
INLINE
VOID F(INT I! CHAR C
/
'' ...
0
NOTE& IT#S IMPERATIVE THAT THE FUNCTION#S
DEFINITION (THE PART BETWEEN THE /...0 BE
PLACED IN A HEADER FILE! UNLESS THE
FUNCTION IS USED ONLY IN A SINGLE.CPP
FILE. IN PARTICULAR! IF YOU PUT THE
INLINE FUNCTION#S DEFINITION INTO A.CPP
FILE AND YOU CALL IT FROM SOME OTHER .CPP
FILE! YOU#LL GET AN (UNRESOLVED E$TERNAL(
ERROR FROM THE LINKER.
4. WHEN YOU DECLARE AN INLINE MEMBER FUNCTION! IT
LOOKS JUST LIKE A NORMAL MEMBER
FUNCTION&
CLASS FRED /
PUBLIC&
VOID F(INT I! CHAR C)
0)
BUT WHEN YOU DEFINE AN INLINE MEMBER FUNCTION!
YOU PREPEND THE MEMBER FUNCTION#S DEFINITION
WITH THE KEYWORD INLINE! AND YOU PUT THE
DEFINITION INTO A HEADER FILE&
INLINE
VOID FRED&&F(INT I! CHAR C1 /
'' ...
0
5. ANOTHER WAY TO TELL THE COMPILER TO MAKE A
MEMBER FUNCTION! DEFINE THE MEMBER FUNCTION IN
THE CLASS BODY ITSELF&
CLASS FRED /
PUBLIC&
VOID F(INT I! CHAR C
/
'' ...
0
0)
CONSTRUCTORS
1. CONSTRUCTORS BUILDS OBJECTS FROM DUST. (CTOR(
IS A TYPICAL ABBREVIATION FOR CONSTRUCTOR.
2. WE CAN NOT MAKE A CONSTRUCTOR CALL ANOTHER
CONSTRUCTOR AS A PRIMITIVE
3. A (DEFAULT CONSTRUCTOR( IS A CONSTRUCTOR THAT
CAN BE CALLED WITH NO ARGUMENTS. THUS A
CONSTRUCTOR THAT TAKES NO ARGUMENTS IS
CERTAINLY A DEFAULT
CONSTRUCTOR&
CLASS FRED /
PUBLIC&
FRED() '' DEFAULT CONSTRUCTOR& CAN BE
CALLED WITH NO ARGS
'' ...
0)
HOWEVER IT IS POSSIBLE (AND EVEN LIKELY THAT
A DEFAULT CONSTRUCTOR CAN TAKE ARGUMENTS!
PROVIDED THEY ARE GIVEN DEFAULT VALUES&
CLASS FRED /
PUBLIC&
FRED(INT I23! INT J25) '' DEFAULT
CONSTRUCTOR& CAN BE CALLED WITH NO
ARGS
'' ...
0)
4. IF YOUR CLASS FRED DOESN'T HAVE A DEFAULT CONSTRUCTOR,
ATTEMPTING TO CREATE AN ARRAY OF FRED OBJECTS IS TRAPPED
AS AN ERROR AT COMPILE TIME.
CLASS FRED /
PUBLIC&
FRED(INT I! INT J)
'' ... ASSUME THERE IS NO DEFAULT
CONSTRUCTOR IN CLASS FRED ...
0)
MAIN(
/
FRED A3145) '' ERROR& FRED
DOESN#T HAVE A DEFAULT CONSTRUCTOR
FRED- P 2 NEW FRED3145) '' ERROR& FRED
DOESN#T HAVE A DEFAULT CONSTRUCTOR
0
6. WITH THE NAMED CONSTRUCTOR IDIOM! YOU DECLARE
ALL THE CLASS#S CONSTRUCTORS IN THE PRIVATE&
OR PROTECTED& SECTIONS! AND YOU PROVIDE PUBLIC
STATIC METHODS THAT RETURN AN OBJECT. THESE
STATIC METHODS ARE THE SO,CALLED (NAMED
CONSTRUCTORS.(
7. WE CAN#T INITIALI"E STATIC MEMBER DATA IN
CONSTRUCTOR#S INITIALI"ATION LIST.BECAUSE YOU
MUST E$PLICITLY DEFINE YOUR CLASS#S STATIC
DATA MEMBERS.
. STATIC DATA MEMBERS MUST BE E$PLICITLY DEFINED
IN E$ACTLY ONE COMPILATION UNIT. IF YOU DIDN#T
DO THIS! YOU#LL PROBABLY GET AN (UNDEFINED
E$TERNAL( LINKER ERROR.
DESTRUCTORS
1. A DESTRUCTOR GIVES AN OBJECT ITS LAST RITES.
DESTRUCTORS ARE USED TO RELEASE ANY RESOURCES
ALLOCATED BY THE OBJECT.
2. THE ORDER THAT LOCAL OBJECTS ARE DESTRUCTED IS
IN REVERSE ORDER OF CONSTRUCTION& FIRST
CONSTRUCTED! LAST DESTRUCTED.
3. THE ORDER THAT OBJECTS IN AN ARRAY ARE
DESTRUCTED IS IN REVERSE ORDER OF
CONSTRUCTION& FIRST CONSTRUCTED! LAST
DESTRUCTED.
IN THE FOLLOWING E$AMPLE! THE ORDER FOR
DESTRUCTORS WILL BE A365! A375! ...!A315!
A345&
VOID USERCODE(
/
FRED A3145) '' ...
0
5. WE CAN8T OVERLOAD THE DESTRUCTOR FOR OUR CLASS
WE CAN HAVE ONLY ONE DESTRUCTOR FOR A CLASS
FRED. IT#S ALWAYS CALLED FRED&&9FRED(. IT
NEVER TAKES ANY PARAMETERS! AND IT NEVER
RETURNS ANYTHING.
YOU CAN#T PASS PARAMETERS TO THE DESTRUCTOR
ANYWAY! SINCE YOU NEVER E$PLICITLY CALL A
DESTRUCTOR. THE DESTRUCTOR WILL GET CALLED
AGAIN AT THE CLOSE 0 OF THE BLOCK IN WHICH THE
LOCAL WAS CREATED. THIS IS A GUARANTEE OF THE
LANGUAGE) IT HAPPENS AUTOMAGICALLY) THERE#S NO
WAY TO STOP IT FROM HAPPENING.
SUPPOSE THE (DESIRABLE SIDE EFFECT OF
DESTRUCTING A LOCAL FILE OBJECT IS TO CLOSE
THE FILE.
*. UNLESS YOU USED PLACEMENT NEW! YOU SHOULD
SIMPLY DELETE THE OBJECT RATHER THAN
E$PLICITLY CALLING THE DESTRUCTOR.FOR E$AMPLE!
SUPPOSE YOU ALLOCATED THE OBJECT VIA A TYPICAL
NEW E$PRESSION&
FRED- P 2 NEW FRED()
THEN THE DESTRUCTOR FRED&&9FRED( WILL
AUTOMAGICALLY GET CALLED WHEN YOU DELETE IT
VIA&
DELETE P) '' AUTOMAGICALLY CALLS P,:9FRED(
YOU SHOULD NOT E$PLICITLY CALL THE DESTRUCTOR!
SINCE DOING SO WON#T RELEASE THE MEMORY THAT
WAS ALLOCATED FOR THE FRED OBJECT ITSELF.
REMEMBER& DELETE P DOES TWO THINGS IT CALLS
THE DESTRUCTOR AND IT DEALLOCATES THE MEMORY.
7. THERE ARE MANY USES OF PLACEMENT NEW. THE
SIMPLEST USE IS TO PLACE AN OBJECT AT A
PARTICULAR LOCATION IN MEMORY. THIS IS DONE
BY SUPPLYING THE PLACE AS A POINTER PARAMETER
TO THE NEW PART OF A NEW E$PRESSION&
.INCLUDE ;NEW.H: '' MUST .INCLUDE THIS
TO USE (PLACEMENT NEW(
.INCLUDE (FRED.H( '' DECLARATION OF CLASS
FRED
VOID SOMECODE(
/
CHAR MEMORY3SI"EOF(FRED5) '' LINE .1
VOID- PLACE 2 MEMORY) '' LINE .2
FRED- F 2 NEW(PLACE FRED() '' LINE .3
(SEE (DANGER( BELOW
'' THE POINTERS F AND PLACE WILL BE E+UAL
0
. A CLASS#S DESTRUCTOR (WHETHER OR NOT YOU
E$PLICITLY DEFINE ONE AUTOMAGICALLY INVOKES
THE DESTRUCTORS FOR MEMBER OBJECTS. THEY ARE
DESTROYED IN THE REVERSE ORDER THEY APPEAR
WITHIN THE DECLARATION FOR THE CLASS.
CLASS MEMBER /
PUBLIC&
9MEMBER()
0)
CLASS FRED /
PUBLIC&
9FRED()

PRIVATE&
MEMBER $<)
MEMBER Y<)
MEMBER "<)
0)
FRED&&9FRED(
/
'' COMPILER AUTOMAGICALLY CALLS "<.9MEMBER(
'' COMPILER AUTOMAGICALLY CALLS Y<.9MEMBER(
'' COMPILER AUTOMAGICALLY CALLS $<.9MEMBER(
0
!. YOU NEVER NEED TO E$PLICITLY CALL A DESTRUCTOR
E$CEPT WITH PLACEMENT NEW
"#. THE DESTRUCTOR WILL GET CALLED AGAIN AT THE
CLOSE 0 OF THE BLOCK IN WHICH THE LOCAL WAS
CREATED. THIS IS A GUARANTEE OF THE LANGUAGE)
IT HAPPENS AUTOMAGICALLY) THERE#S NO WAY TO
STOP IT FROM HAPPENING. BUT YOU CAN GET
REALLY BAD RESULTS FROM CALLING A DESTRUCTOR
ON THE SAME OBJECT A SECOND TIME= BANG= YOU#RE
DEAD=
"". A DERIVED CLASS#S DESTRUCTOR (WHETHER OR NOT
YOU E$PLICITLY DEFINE ONE AUTOMAGICALLY
INVOKES THE DESTRUCTORS FOR BASE CLASS
SUBOBJECTS. BASE CLASSES ARE DESTRUCTED AFTER
MEMBER OBJECTS. IN THE EVENT OF MULTIPLE
INHERITANCE! DIRECT BASE CLASSES ARE
DESTRUCTED IN THE REVERSE ORDER OF THEIR
APPEARANCE IN THE INHERITANCE LIST.
CLASS MEMBER /
PUBLIC&
9MEMBER() '' ...
0)
CLASS BASE /
PUBLIC&
VIRTUAL 9BASE() '' A VIRTUAL '' ...
0)
CLASS DERIVED & PUBLIC BASE /
PUBLIC&
9DERIVED()
'' ...
PRIVATE&
MEMBER $<)
0)
DERIVED&&9DERIVED(
/
'' COMPILER AUTOMAGICALLY CALLS $<.9MEMBER(
'' COMPILER AUTOMAGICALLY CALLS
BASE&&9BASE(
0
SELF ASSIGNMENT
". SELF ASSIGNMENT IS WHEN SOMEONE ASSIGNS AN
OBJECT WITH ITSELF. FOR E$AMPLE!
.INCLUDE (FRED.HPP( '' DECLARES CLASS FRED
VOID USERCODE(FRED> $
/
$ 2 $) '' SELF,ASSIGNMENT
0
OPERATOR OVERLOADING
1. IT ALLOWS YOU TO PROVIDE AN INTUITIVE
INTERFACE TO USERS OF YOUR CLASS.OPERATOR
OVERLOADING ALLOWS C'C%% OPERATORS TO HAVE
USER,DEFINED MEANINGS ON USER,DEFINED TYPES
(CLASSES.
'' WITHOUT OPERATOR OVERLOADING&
FRED ADD(FRED! FRED)
FRED MUL(FRED! FRED)
FRED F(FRED A! FRED B! FRED C
/
RETURN ADD(ADD(MUL(A!B! MUL(B!C!
MUL(C!A) '' YUK...
0
.ELSE
'' WITH OPERATOR OVERLOADING&
FRED OPERATOR% (FRED! FRED)
FRED OPERATOR- (FRED! FRED)
FRED F(FRED A! FRED B! FRED C
/
RETURN A-B % B-C % C-A)
0
.ENDIF
2. BY OVERLOADING STANDARD OPERATORS ON A CLASS!
YOU CAN E$PLOIT THE INTUITION OF THE USERS OF
THAT CLASS. THIS LETS USERS PROGRAM IN THE
LANGUAGE OF THE ROBLEM DOMAIN RATHER THAN IN
THE LANGUAGE OF THE MACHINE.
THE ULTIMATE GOAL IS TO REDUCE BOTH THE
LEARNING CURVE AND THE DEFECT RATE.
$ MYSTRING % YOURSTRING MIGHT CONCATENATE TWO
STRING OBJECTS
$ MYDATE%% MIGHT INCREMENT A DATE OBJECT
$ A - B MIGHT MULTIPLY TWO NUMBER OBJECTS
$ A3I5 MIGHT ACCESS AN ELEMENT OF AN ARRAY
OBJECT
3. OPERATORS THAT CAN'CANNOT BE OVERLOADED&
THE ONLY C OPERATORS THAT CAN#T BE ARE .
AND ?& (AND SI"EOF! WHICH IS TECHNICALLY AN
OPERATOR. C%% ADDS A FEW OF ITS OWN
OPERATORS! MOST OF WHICH CAN BE OVERLOADED
E$CEPT && AND .-.
HERE#S AN E$AMPLE OF THE SUBSCRIPT OPERATOR IT
RETURNS A REFERENCE. FIRST WITHOUT OPERATOR
OVERLOADING&
CLASS ARRAY /
PUBLIC&
.IF 4
INT> ELEM(UNSIGNED I / IF (I :
66 ERROR() RETURN DATA3I5) 0
.ELSE
INT> OPERATOR35 (UNSIGNED I / IF (I : 66
ERROR() RETURN DATA3I5) 0
.ENDIF
PRIVATE&
INT DATA31445)
0)
MAIN(
/
ARRAY A)
.IF 4
A.ELEM(14 2 42)
A.ELEM(12 %2 A.ELEM(13)
.ELSE
A3145 2 42)
A3125 %2 A3135)
.ENDIF
0
4. AT LEAST ONE OPERAND OF ANY OVERLOADED
OPERATOR MUST BE OF SOME CLASS TYPE.
5. WE CAN8T CREATE A OPERATOR-- FOR (TO,THE,
POWER, OF( OPERATIONS. ONLY E$ISTING OPERATORS
CAN BE OVERLOADED.
6. WE CAN CREATE A SUBSCRIPT OPERATOR FOR A
MATRI$ CLASS BY USING USE OPERATOR( RATHER
THAN OPERATOR35.
WHEN YOU HAVE MULTIPLE SUBSCRIPTS! THE
CLEANEST WAY TO DO IT IS WITH OPERATOR(
RATHER THAN WITH OPERATOR35. THE REASON IS
THAT OPERATOR35 ALWAYS TAKES E$ACTLY ONE
PARAMETER! BUT OPERATOR( CAN TAKE ANY NUMBER
OF PARAMETERS (IN THE CASE OF A RECTANGULAR
MATRI$! TWO PARAMTERS ARE NEEDED.
FRIEND FUNCTIONS
1. SOMETHING TO ALLOW YOUR CLASS TO GRANT ACCESS
TO ANOTHER CLASS OR FUNCTION. FRIENDS CAN BE
EITHER FUNCTIONS OR OTHER CLASSES. A CLASS
GRANTS ACCESS PRIVILEGES TO ITS FRIENDS.
2. MEMBER FUNCTIONS AND FRIEND FUNCTIONS ARE
E+UALLY PRIVILEGED. THE MAJOR DIFFERENCE IS
THAT A FRIEND FUNCTION IS CALLED LIKE F($!
WHILE A MEMBER FUNCTION IS CALLED LIKE $.F(.
3. THE MAJOR DISADVANTAGE OF FRIEND FUNCTIONS IS
THAT THEY RE+UIRE AN E$TRA LINE OF CODE WHEN
YOU WANT DYNAMIC BINDING. TO GET THE EFFECT OF
A VIRTUAL FRIEND! THE FRIEND FUNCTION SHOULD
CALL A HIDDEN (USUALLY PROTECTED& VIRTUAL
MEMBER FUNCTION. THIS IS CALLED THE VIRTUAL
FRIEND FUNCTION IDIOM.
FOR E$AMPLE&
CLASS BASE /
PUBLIC&
FRIEND VOID F(BASE> B)
'' ...
PROTECTED&
VIRTUAL VOID DO<F()
'' ...
0)
INLINE VOID F(BASE> B
/
B.DO<F()
0
CLASS DERIVED & PUBLIC BASE / PUBLIC&
'' ...
PROTECTED&
VIRTUAL VOID DO<F() '' (OVERRIDE( THE
BEHAVIOR OF F(BASE> B
'' ...
0)
VOID USERCODE(BASE> B
/
F(B)
0
4. (FRIENDSHIP IS NEITHER INHERITED NOR
TRANSITIVE(&
I MAY DECLARE YOU AS MY FRIEND! BUT THAT
DOESN#T MEAN I NECESSARILY TRUST EITHER YOUR
KIDS OR YOUR FRIENDS.
I DON#T NECESSARILY TRUST THE KIDS OF MY
FRIENDS. THE PRIVILEGES OF FRIENDSHIP AREN#T
INHERITED. DERIVED CLASSES OF A FRIEND AREN#T
NECESSARILY FRIENDS. IF CLASS FRED DECLARES
THAT CLASS BASE IS A FRIEND! CLASSES DERIVED
FROM BASE DON#T HAVE ANY AUTOMATIC SPECIAL
ACCESS RIGHTS TO FRED OBJECTS.
I DON#T NECESSARILY TRUST THE FRIENDS OF MY
FRIENDS. THE PRIVILEGES OF FRIENDSHIP AREN#T
TRANSITIVE.A FRIEND OF A FRIEND ISN#T
NECESSARILY A FRIEND. IF CLASS FRED DECLARES
CLASS WILMA AS A FRIEND! AND CLASS WILMA
DECLARES CLASS BETTY AS A FRIEND! CLASS BETTY
DOESN#T NECESSARILY HAVE ANY SPECIAL ACCESS
RIGHTS TO FRED OBJECTS.
5. USE A MEMBER WHEN YOU CAN! AND A FRIEND WHEN
YOU HAVE TO.SOMETIMES FRIENDS ARE
SYNTACTICALLY BETTER (E.G.! IN CLASS FRED!
FRIEND FUNCTIONS ALLOW THE FRED PARAMETER TO
BE SECOND! WHILE MEMBERS RE+UIRE IT TO BE
FIRST. ANOTHER GOOD USE OF FRIEND FUNCTIONS
ARE THE BINARY INFI$ ARITHMETIC OPERATORS.
E.G.! ACOMPLE$ % ACOMPLE$ SHOULD BE DEFINED AS
A FRIEND RATHER THAN A MEMBER IF YOU WANT TO
ALLOW AFLOAT % ACOMPLE$ AS WELL (MEMBER
FUNCTIONS DON#T ALLOW PROMOTION OF THE LEFT
HAND ARGUMENT! SINCE THAT WOULD CHANGE THE
CLASS OF THE OBJECT THAT IS THE RECIPIENT OF
THE MEMBER FUNCTION INVOCATION.
IN OTHER CASES! CHOOSE A MEMBER FUNCTION OVER
A FRIEND FUNCTION.
IOSTREAMS
1. ;IOSTREAM.H: INSTEAD OF THE TRADITIONAL
;STDIO.H:?
INCREASE TYPE SAFETY! REDUCE ERRORS! IMPROVE
PERFORMANCE! ALLOW E$TENSIBILITY!1AND PROVIDE
SUBCLASSABILITY.
PRINTF( IS ARGUABLY NOT BROKEN! AND SCANF( IS
PERHAPS LIVABLE DESPITE BEING
ERROR PRONE! HOWEVER BOTH ARE LIMITED WITH RESPECT
TO WHAT C%% I'O CAN DO. C%%
I'O (USING ;; AND :: IS! RELATIVE TO C (USING
PRINTF( AND SCANF(&
- BETTER TYPE SAFETY& WITH ;IOSTREAM.H:! THE TYPE
OF OBJECT BEING I'O#D IS
KNOWN STATICALLY BY THE COMPILER. IN CONTRAST!
;STDIO.H: USES (@( FIELDS TO
FIGURE OUT THE TYPES DYNAMICALLY.
- LESS ERROR PRONE& WITH ;IOSTREAM.H:! THERE ARE
NO REDUNDANT (@( TOKENS THAT
HAVE TO BE CONSISTENT WITH THE ACTUAL OBJECTS
BEING I'O#D. REMOVING
REDUNDANCY REMOVES A CLASS OF ERRORS.
- E$TENSIBLE& THE C%% ;IOSTREAM.H: MECHANISM
ALLOWS NEW USER,DEFINED TYPES TO
BE I'O#D WITHOUT BREAKING E$ISTING CODE.
IMAGINE THE CHAOS IF EVERYONE WAS
SIMULTANEOUSLY ADDING NEW INCOMPATIBLE (@(
FIELDS TO PRINTF( AND
SCANF(?=.
- SUBCLASSABLE& THE C%% ;IOSTREAM.H: MECHANISM IS
BUILT FROM REAL CLASSES SUCH
AS OSTREAM AND ISTREAM. UNLIKE ;STDIO.H:#S
FILE-! THESE ARE REAL CLASSES
AND HENCE SUBCLASSABLE. THIS MEANS YOU CAN
HAVE OTHER USER,DEFINED THINGS
THAT LOOK AND ACT LIKE STREAMS! YET THAT DO
WHATEVER STRANGE AND WONDERFUL
THINGS YOU WANT. YOU AUTOMATICALLY GET TO USE
THE "ILLIONS OF LINES OF I'O
CODE WRITTEN BY USERS YOU DON#T EVEN KNOW! AND
THEY DON#T NEED TO KNOW ABOUT
YOUR (E$TENDED STREAM( CLASS.
2. YOU SHOULD USE FORWARD SLASHES IN YOUR
FILENAMES! EVEN ON AN OPERATING SYSTEM
THAT USES BACKSLASHES SUCH AS DOS! WINDOWS! OS'2!
ETC. FOR E$AMPLE&
.INCLUDE ;IOSTREAM.H:
.INCLUDE ;FSTREAM.H:
MAIN(
/
.IF 1
IFSTSREAM FILE((..'TEST.DAT() ''
RIGHT=
.ELSE
IFSTSREAM FILE((..ATEST.DAT() ''
WRONG=
.ENDIF
'' ...
0
REMEMBER! THE BACKSLASH ((A( IS USED IN STRING
LITERALS TO CREATE SPECIAL
CHARACTERS& (AN( IS A NEWLINE! (AB( IS A
BACKSPACE! AND (AT( IS A TAB! (AA( IS
AN (ALERT(! (AV( IS A VERTICAL,TAB! ETC.
THEREFORE THE FILE NAME
(AVERSIONANE$TAALPHAABETAATEST.DAT( IS INTERPRETED
AS A BUNCH OF VERY FUNNY
CHARACTERS) USE
('VERSION'NE$T'ALPHA'BETA'TEST.DAT( INSTEAD! EVEN
ON SYSTEMS
THAT USE A (A( AS THE DIRECTORY SEPARATOR SUCH AS
DOS! WINDOWS! OS'2! ETC.
3. THERE IS NO STANDARD WAY TO CAUSE CIN! COUT!
AND'OR CERR TO BE
OPENED IN BINARY MODE. CLOSING THE STREAMS AND
ATTEMPTING TO REOPEN THEM IN
BINARY MODE MIGHT HAVE UNE$PECTED OR UNDESIRABLE
RESULTS.
4. IGNORING MY INPUT RE+UEST AFTER THE FIRST
ITERATION?
BECAUSE THE NUMERICAL E$TRACTOR LEAVES NON,DIGITS
BEHIND IN THE INPUT BUFFER.
IF YOUR CODE LOOKS LIKE THIS&
CHAR NAME314445)
INT AGE)
FOR ()) /
COUT ;; (NAME& ()
CIN :: NAME)
COUT ;; (AGE& ()
CIN :: AGE)
0
WHAT YOU REALLY WANT IS&
FOR ()) /
COUT ;; (NAME& ()
CIN :: NAME)
COUT ;; (AGE& ()
CIN :: AGE)
CIN.IGNORE(INT<MA$! #AN#)1 0
5. PROVIDE A FRIEND3145 OPERATOR;;315.*5 THAT
CALLS A PROTECTED VIRTUAL3245
FUNCTION&
CLASS BASE /
PUBLIC&
FRIEND OSTREAM> OPERATOR;; (OSTREAM> O!
CONST BASE> B)
'' ...
PROTECTED&
VIRTUAL VOID PRINT(OSTREAM> O CONST)
0)
INLINE OSTREAM> OPERATOR;; (OSTREAM> O! CONST
BASE> B
/
B.PRINT(O)
RETURN O)
0
CLASS DERIVED & PUBLIC BASE /
PROTECTED&
VIRTUAL VOID PRINT(OSTREAM> O CONST)
0)
THE END RESULT IS THAT OPERATOR;; ACTS AS IF IT
WAS DYNAMICALLY BOUND! EVEN
THOUGH IT#S A FRIEND3145 FUNCTION. THIS IS CALLED
THE VIRTUAL FRIEND FUNCTION
IDIOM.
NOTE THAT DERIVED CLASSES OVERRIDE PRINT(OSTREAM>
CONST. IN PARTICULAR! THEY
DO NOT PROVIDE THEIR OWN OPERATOR;;.
NATURALLY IF BASE IS AN ABC322.35!
BASE&&PRINT(OSTREAM> CONST CAN BE DECLARED
PURE VIRTUAL322.45 USING THE (2 4( SYNTA$.
6.
MEMORY MANAGEMENT
WE CAN8T FREE( POINTERS ALLOCATED WITH NEW? CAN
I DELETE POINTERS1 ALLOCATED WITH MALLOC(?
2. DELETE P DELETE THE POINTER P! OR THE POINTED,
TO,DATA -P?
THE POINTED,TO,DATA.
3. NEW INSTEAD OF TRUSTWORTHY OLD MALLOC(?
CONSTRUCTORS'DESTRUCTORS! TYPE SAFETY!
OVERRIDABILITY.
- CONSTRUCTORS'DESTRUCTORS& UNLIKE
MALLOC(SI"EOF(FRED! NEW FRED( CALLS
FRED#S CONSTRUCTOR. SIMILARLY! DELETE P CALLS
-P#S DESTRUCTOR.
- TYPE SAFETY& MALLOC( RETURNS A VOID- WHICH
ISN#T TYPE SAFE. NEW FRED(
RETURNS A POINTER OF THE RIGHT TYPE (A FRED-.
- OVERRIDABILITY& NEW IS AN OPERATOR THAT CAN BE
OVERRIDDEN BY A CLASS! WHILE
MALLOC( IS NOT OVERRIDABLE ON A PER,CLASS
BASIS.
4. 31*.45 CAN I USE REALLOC( ON POINTERS
ALLOCATED VIA NEW?
NO=
WHEN REALLOC( HAS TO COPY THE ALLOCATION! IT USES
A BITWISE COPY OPERATION!
WHICH WILL TEAR MANY C%% OBJECTS TO SHREDS. C%%
OBJECTS SHOULD BE ALLOWED TO
COPY THEMSELVES. THEY USE THEIR OWN COPY
CONSTRUCTOR OR ASSIGNMENT OPERATOR.
BESIDES ALL THAT! THE HEAP THAT NEW USES MAY NOT
BE THE SAME AS THE HEAP THAT
MALLOC( AND REALLOC( USE=
5. NEED TO CHECK FOR NULL BEFORE DELETE P?
NO=
*. DELETE P IS A TWO,STEP PROCESS& IT CALLS THE
DESTRUCTOR! THEN RELEASES THE
MEMORY. THE CODE GENERATED FOR DELETE P LOOKS
SOMETHING LIKE THIS (ASSUMING P
IS OF TYPE FRED-&
'' ORIGINAL CODE& DELETE P)
IF (P =2 NULL /
P,:9FRED()
OPERATOR DELETE(P)
0
1THE STATEMENT P,:9FRED( CALLS THE DESTRUCTOR FOR
THE FRED OBJECT POINTED TO BY
P.
B. ALLOCATE ' UNALLOCATE AN ARRAY OF THINGS?
USE P 2 NEW T3N5 AND DELETE35 P&
FRED- P 2 NEW FRED31445)
'' ...
DELETE35 P)
ANY TIME YOU ALLOCATE AN ARRAY OF OBJECTS VIA NEW
(USUALLY WITH THE 3N5 IN THE1NEW E$PRESSION! YOU
MUST USE 35 IN THE DELETE STATEMENT. THIS SYNTA$
IS
NECESSARY BECAUSE THERE IS NO SYNTACTIC DIFFERENCE
BETWEEN A POINTER TO A THING
AND A POINTER TO AN ARRAY OF THINGS (SOMETHING WE
INHERITED FROM C.
7. IS IT LEGAL (AND MORAL FOR A MEMBER FUNCTION
TO SAY DELETE THIS?
AS LONG AS YOU#RE CAREFUL! IT#S OK FOR AN OBJECT
TO COMMIT SUICIDE (DELETE
THIS.
HERE#S HOW I DEFINE (CAREFUL(&
1. YOU MUST BE ABSOLUTELY 144@ POSITIVE SURE THAT
THIS OBJECT WAS ALLOCATED
VIA NEW (NOT BY NEW35! NOR BY PLACEMENT
NEW311.145! NOR A LOCAL OBJECT ON
THE STACK! NOR A GLOBAL! NOR A MEMBER OF
ANOTHER OBJECT) BUT BY PLAIN
ORDINARY NEW.
2. YOU MUST BE ABSOLUTELY 144@ POSITIVE SURE THAT
YOUR MEMBER FUNCTION WILL BE
THE LAST MEMBER FUNCTION INVOKED ON THIS
OBJECT.
3. YOU MUST BE ABSOLUTELY 144@ POSITIVE SURE THAT
THE REST OF YOUR MEMBER
FUNCTION (AFTER THE DELETE THIS LINE DOESN#T
TOUCH ANY PIECE OF THIS
OBJECT (INCLUDING CALLING ANY OTHER MEMBER
FUNCTIONS OR TOUCHING ANY DATA
MEMBERS.
4. YOU MUST BE ABSOLUTELY 144@ POSITIVE SURE THAT
NO ONE EVEN TOUCHES THE THIS
POINTER ITSELF AFTER THE DELETE THIS LINE. IN
OTHER WORDS! YOU MUST NOT
E$AMINE IT! COMPARE IT WITH ANOTHER POINTER!
COMPARE IT WITH NULL! PRINT
IT! CAST IT! DO ANYTHING WITH IT.
NATURALLY THE USUAL CAVEATS APPLY IN CASES WHERE
YOUR THIS POINTER IS A POINTER
TO A BASE CLASS WHEN YOU DON#T HAVE A VIRTUAL
DESTRUCTOR324.45.
6. C%% HAVE ARRAYS WHOSE LENGTH CAN BE SPECIFIED
AT RUN,TIME?
YES! IN THE SENSE THAT STL332.15 HAS A VECTOR
TEMPLATE THAT PROVIDES THIS
BEHAVIOR.
NO! IN THE SENSE THAT BUILT,IN ARRAY TYPES NEED TO
HAVE THEIR LENGTH SPECIFIED
AT COMPILE TIME.
YES! IN THE SENSE THAT EVEN BUILT,IN ARRAY TYPES
CAN SPECIFY THE FIRST INDE$
BOUNDS AT RUN,TIME.
14. HOW CAN I FORCE OBJECTS OF MY CLASS TO ALWAYS
BE CREATED VIA NEW RATHER
THAN AS LOCALS OR GLOBAL'STATIC OBJECTS?
USE THE NAMED CONSTRUCTOR IDIOM314.*5.
AS USUAL WITH THE NAMED CONSTRUCTOR IDIOM! THE
CONSTRUCTORS ARE ALL PRIVATE& OR
PROTECTED&! AND THERE ARE ONE OR MORE PUBLIC
STATIC CREATE( METHODS (THE
SO,CALLED (NAMED CONSTRUCTORS(! ONE PER
CONSTRUCTOR. IN THIS CASE THE
CREATE( METHODS ALLOCATE THE OBJECTS VIA NEW.
SINCE THE CONSTRUCTORS
THEMSELVES ARE NOT PUBLIC! THERE IS NO OTHER WAY
TO CREATE OBJECTS OF THE
CLASS.
CLASS FRED /
PUBLIC&
'' THE CREATE( METHODS ARE THE (NAMED
CONSTRUCTORS(&
STATIC FRED- CREATE(
/ RETURN NEW FRED() 0
STATIC FRED- CREATE(INT I
/ RETURN NEW FRED(I) 0
STATIC FRED- CREATE(CONST FRED> FRED
/ RETURN NEW FRED(FRED) 0
'' ...
PRIVATE&
'' THE CONSTRUCTORS THEMSELVES ARE PRIVATE
OR PROTECTED&
FRED()
FRED(INT I)
FRED(CONST FRED> FRED)
'' ...
0)
NOW THE ONLY WAY TO CREATE FRED OBJECTS IS VIA
FRED&&CREATE(&
MAIN(
/
FRED- P 2 FRED&&CREATE(5)
'' ...
DELETE P)
0
MAKE SURE YOUR CONSTRUCTORS ARE IN THE PROTECTED&
SECTION IF YOU E$PECT FRED TO
HAVE DERIVED CLASSES.
NOTE ALSO THAT YOU CAN MAKE ANOTHER CLASS WILMA A
FRIEND3145 OF FRED IF YOU
WANT TO ALLOW A WILMA TO HAVE A MEMBER OBJECT OF
CLASS FRED! BUT OF COURSE THIS
IS A SOFTENING OF THE ORIGINAL GOAL! NAMELY TO
FORCE FRED OBJECTS TO BE
ALLOCATED VIA NEW.
11.
E$$EPTION HANDLINIG
1. HOW CAN I HANDLE A CONSTRUCTOR THAT FAILS?
THROW AN E$CEPTION.1
CONSTRUCTORS DON#T HAVE A RETURN TYPE! SO IT#S NOT
POSSIBLE TO USE ERROR CODES.
THE BEST WAY TO SIGNAL CONSTRUCTOR FAILURE IS
THEREFORE TO THROW AN E$CEPTION.
IF YOU DON#T HAVE OR WON#T USE E$CEPTIONS! HERE#S
A WORK,AROUND. IF A
CONSTRUCTOR FAILS! THE CONSTRUCTOR CAN PUT THE
OBJECT INTO A ("OMBIE( STATE.
DO THIS BY SETTING AN INTERNAL STATUS BIT SO THE
OBJECT ACTS SORT OF LIKE ITS
DEAD EVEN THOUGH IT IS TECHNICALLY STILL ALIVE.
THEN ADD A +UERY ((INSPECTOR(
MEMBER FUNCTION TO CHECK THIS ("OMBIE( BIT SO
USERS OF YOUR CLASS CAN FIND OUT
IF THEIR OBJECT IS TRULY ALIVE! OR IF IT#S A
"OMBIE (I.E.! A (LIVING DEAD(
OBJECT. ALSO YOU#LL PROBABLY WANT TO HAVE YOUR
OTHER MEMBER FUNCTIONS CHECK
THIS "OMBIE BIT! AND! IF THE OBJECT ISN#T REALLY
ALIVE! DO A NO,OP (OR PERHAPS
SOMETHING MORE OBNO$IOUS SUCH AS ABORT(. THIS
IS REALLY UGLY! BUT IT#S THE
BEST YOU CAN DO IF YOU CAN#T (OR DON#T WANT TO
USE E$CEPTIONS.
CONST CORRECTNESS
1. CDEFG CDHHICGEIFF(? 3UPDATED=5
3RICIEGJK HILHDGI MICNOFI DP QIJRPOJ PIISMNCT PHDU NDH JNVSV (DE 1'6B.5
A WDDS GQVEW. IG UINEF OFVEW GQI TIKLDHS CDEFG GD RHIXIEG CDEFG DMYICGF PHDU
WIGGVEW UOGNGIS.
FDH IZNURJI! VP KDO LNEGIS GD CHINGI N POECGVDE P( GQNG NCCIRGIS N SGHVEW!1RJOF
KDO LNEG GD RHDUVFI CNJJIHF EDG GD CQNEWI GQI CNJJIH#F SGHVEW GQNG WIGF
RNFFIS GD P(! KDO CNE QNXI P( HICIVXI VGF SGHVEW RNHNUIGIH . . .
- XDVS P1(CDEFG SGHVEW> F) '' PNFF MK HIPIHIECI,GD,CDEFG
- XDVS P2(CDEFG SGHVEW- FRGH) '' PNFF MK RDVEGIH,GD,CDEFG
- XDVS P3(SGHVEW F) '' PNFF MK XNJOI
IE GQI RNFF MK HIPIHIECI,GD,CDEFG NES RNFF MK RDVEGIH,GD,CDEFG CNFIF! NEK
NGGIURGF GD CQNEWI GD GQI CNJJIH#F SGHVEW LVGQVE GQI P( POECGVDEF LDOJS MI
PJNWWIS MK GQI CDURVJIH NF NE IHHDH NG CDURVJI,GVUI. TQVF CQICT VF SDEI
IEGVHIJK NG CDURVJI,GVUI& GQIHI VF ED HOE,GVUI FRNCI DH FRIIS CDFG PDH GQI
CDEFG. IE GQI RNFF MK XNJOI CNFI (P3(! GQI CNJJIS POECGVDE WIGF N CDRK DP
GQI CNJJIH#F SGHVEW. TQVF UINEF GQNG P3( CNE CQNEWI VGF JDCNJ CDRK! MOG GQI
CDRK VF SIFGHDKIS LQIE P3( HIGOHEF. IE RNHGVCOJNH P3( CNEEDG CQNEWI GQI
CNJJIH#F SGHVEW DMYICG.
AF NE DRRDFVGI IZNURJI! VP KDO LNEGIS GD CHINGI N POECGVDE W( GQNG NCCIRGIS N
SGHVEW! MOG KDO LNEG GD JIG CNJJIHF TEDL GQNG W( UVWQG CQNEWI GQI CNJJIH#F
SGHVEW DMYICG. IE GQVF CNFI KDO CNE QNXI W( HICIVXI VGF SGHVEW RNHNUIGIH . .
.
- XDVS W1(SGHVEW> F) '' PNFF MK HIPIHIECI,GD,EDE,CDEFG
- XDVS W2(SGHVEW- FRGH) '' PNFF MK RDVEGIH,GD,EDE,CDEFG
TQI JNCT DP CDEFG VE GQIFI POECGVDEF GIJJF GQI CDURVJIH GQNG GQIK NHI NJJDLIS
GD (MOG NHI EDG HI[OVHIS GD CQNEWI GQI CNJJIH#F SGHVEW DMYICG. TQOF GQIK CNE
RNFF GQIVH SGHVEW GD NEK DP GQI P( POECGVDEF! MOG DEJK P3( (GQI DEI GQNG
HICIVXIF VGF RNHNUIGIH (MK XNJOI( CNE RNFF VGF SGHVEW GD W1( DH W2(. IP
P1( DH P2( EIIS GD CNJJ IVGQIH W( POECGVDE! N JDCNJ CDRK DP GQI SGHVEW
DMYICG UOFG MI RNFFIS GD GQI W( POECGVDE) GQI RNHNUIGIH GD P1( DH P2( CNEEDG
MI SVHICGJK RNFFIS GD IVGQIH W( POECGVDE. E.W.!
XDVS W1(SGHVEW> F)
XDVS P1(CDEFG SGHVEW> F
/
W1(F) '' CDURVJI,GVUI EHHDH FVECI F VF CDEFG
SGHVEW JDCNJCDRK 2 F)
W1(JDCNJCDRK) '' OK FVECI JDCNJCDRK VF EDG CDEFG
0
NNGOHNJJK VE GQI NMDXI CNFI! NEK CQNEWIF GQNG W1( UNTIF NHI UNSI GD GQI
JDCNJCDRK DMYICG GQNG VF JDCNJ GD P1(. IE RNHGVCOJNH! ED CQNEWIF LVJJ MI UNSI
GD GQI CDEFG RNHNUIGIH GQNG LNF RNFFIS MK HIPIHIECI GD P1(.
2. DICJNHVEW GQI CDEFG,EIFF DP N RNHNUIGIH VF YOFG NEDGQIH PDHU DP GKRI
FNPIGK.
IG VF NJUDFG NF VP N CDEFG SGHVEW! PDH IZNURJI! VF N SVPPIHIEG CJNFF GQNE NE
DHSVENHK SGHVEW! FVECI GQI CDEFG XNHVNEG VF UVFFVEW GQI XNHVDOF UOGNGVXI
DRIHNGVDEF VE GQI EDE,CDEFG XNHVNEG (I.W.! KDO CNE VUNWVEI GQNG N CDEFG SGHVEW
FVURJK SDIFE#G QNXI NE NFFVWEUIEG DRIHNGDH.
IP KDO PVES DHSVENHK GKRI FNPIGK QIJRF KDO WIG FKFGIUF CDHHICG (VG SDIF)
IFRICVNJJK VE JNHWI FKFGIUF! KDO#JJ PVES CDEFG CDHHICGEIFF QIJRF NJFD.
3. (CDEFG FHIS- R( UINE?
IG UINEF R RDVEGF GD NE DMYICG DP CJNFF FHIS! MOG R CNE#G MI OFIS GD CQNEWI
GQNG FHIS DMYICG (ENGOHNJJK R CDOJS NJFD MI NULL.
FDH IZNURJI! VP CJNFF FHIS QNF N CDEFG UIUMIH POECGVDE317.65 CNJJIS VEFRICG(!
FNKVEW R,:VEFRICG( VF OK. BOG VP CJNFF FHIS QNF N EDE,CDEFG UIUMIH
POECGVDE317.65 CNJJIS UOGNGI(! FNKVEW R,:UOGNGI( VF NE IHHDH (GQI IHHDH VF
CNOWQG MK GQI CDURVJIH) ED HOE,GVUI GIFGF NHI SDEI! LQVCQ UINEF CDEFG SDIFE#G
FJDL KDOH RHDWHNU SDLE.
4. GQI SVPPIHIECI MIGLIIE (CDEFG FHIS- R(! (FHIS- CDEFG R( NES
(CDEFG FHIS- CDEFG R(?
YDO QNXI GD HINS RDVEGIH SICJNHNGVDEF HVWQG,GD,JIPG.
- CDEFG FHIS- R UINEF (R RDVEGF GD N FHIS GQNG VF CDEFG( ,, GQNG VF! GQI FHIS
DMYICG CNE#G MI CQNEWIS XVN R317.135.
- FHIS- CDEFG R UINEF (R VF N CDEFG RDVEGIH GD N FHIS( ,, GQNG VF! KDO CNE
CQNEWI GQI FHIS DMYICG XVN R317.135! MOG KDO CNE#G CQNEWI GQI RDVEGIH R
VGFIJP.
- CDEFG FHIS- CDEFG R UINEF (R VF N CDEFG RDVEGIH GD N CDEFG FHIS( ,, GQNG VF!
KDO CNE#G CQNEWI GQI RDVEGIH R VGFIJP! EDH CNE KDO CQNEWI GQI FHIS DMYICG
%&' ()"."3*
5. (CDEFG FHIS> Z( UINE?
IG UINEF Z NJVNFIF N FHIS DMYICG! MOG Z CNE#G MI OFIS GD CQNEWI GQNG FHIS
DMYICG.
FDH IZNURJI! VP CJNFF FHIS QNF N CDEFG UIUMIH POECGVDE317.65 CNJJIS VEFRICG(!
FNKVEW Z.VEFRICG( VF OK. BOG VP CJNFF FHIS QNF N EDE,CDEFG UIUMIH
POECGVDE317.65 CNJJIS UOGNGI(! FNKVEW Z.UOGNGI( VF NE IHHDH (GQI IHHDH VF
CNOWQG MK GQI CDURVJIH) ED HOE,GVUI GIFGF NHI SDEI! LQVCQ UINEF CDEFG SDIFE#G
FJDL KDOH RHDWHNU SDLE.
6. FHIS> CDEFG Z( UNTI NEK FIEFI?
ND! VG VF EDEFIEFI.
7. (FHIS CDEFG> Z( VF POECGVDENJJK I[OVXNJIEG GD (CDEFG FHIS> Z(317.*5.
8. (CDEFG UIUMIH POECGVDE(?
A UIUMIH POECGVDE GQNG VEFRICGF (HNGQIH GQNE UOGNGIF VGF DMYICG.
A CDEFG UIUMIH POECGVDE VF VESVCNGIS MK N CDEFG FOPPVZ YOFG NPGIH GQI UIUMIH
POECGVDE#F RNHNUIGIH JVFG. MIUMIH POECGVDEF LVGQ N CDEFG FOPPVZ NHI CNJJIS
(CDEFG UIUMIH POECGVDEF( DH (VEFRICGDHF.( MIUMIH POECGVDEF LVGQDOG N CDEFG
FOPPVZ NHI CNJJIS (EDE,CDEFG UIUMIH POECGVDEF( DH (UOGNGDHF.(
CJNFF FHIS /
ROMJVC&
XDVS VEFRICG( CDEFG) '' TQVF UIUMIH RHDUVFIF NOT GD CQNEWI -GQVF
XDVS UOGNGI() '' TQVF UIUMIH POECGVDE UVWQG CQNEWI -GQVF
0)
XDVS OFIHCDSI(FHIS> CQNEWINMJI! CDEFG FHIS> OECQNEWINMJI
/
CQNEWINMJI.VEFRICG() '' OK& SDIFE#G CQNEWI N CQNEWINMJI DMYICG
CQNEWINMJI.UOGNGI() '' OK& CQNEWIF N CQNEWINMJI DMYICG
OECQNEWINMJI.VEFRICG() '' OK& SDIFE#G CQNEWI NE OECQNEWINMJI DMYICG
OECQNEWINMJI.UOGNGI() '' ERROR& NGGIURG GD CQNEWI OECQNEWINMJI DMYICG
0
TQI IHHDH VE OECQNEWINMJI.UOGNGI( VF CNOWQG NG CDURVJI GVUI. TQIHI VF ED
HOEGVUI FRNCI DH FRIIS RIENJGK PDH CDEFG.
TQI GHNVJVEW CDEFG DE VEFRICG( UIUMIH POECGVDE UINEF GQNG GQI NMFGHNCG
(CJVIEG,XVFVMJI FGNGI DP GQI DMYICG VFE#G WDVEW GD CQNEWI. TQVF VF FJVWQGJK
SVPPIHIEG PHDU RHDUVFVEW GQNG GQI (HNL MVGF( DP GQI DMYICG#F FGHOCG NHIE#G
WDVEW GD CQNEWI. C%% CDURVJIHF NHIE#G NJJDLIS GD GNTI GQI (MVGLVFI(
VEGIHRHIGNGVDE OEJIFF GQIK CNE FDJXI GQI NJVNFVEW RHDMJIU! LQVCQ EDHUNJJK CNE#G
MI FDJXIS (V.I.! N EDE,CDEFG NJVNF CDOJS IZVFG LQVCQ CDOJS UDSVPK GQI FGNGI DP
GQI DMYICG. AEDGQIH (VURDHGNEG VEFVWQG PHDU GQVF NJVNFVEW VFFOI& RDVEGVEW NG
NE DMYICG LVGQ N CDEFG RDVEGIH SDIFE#G WONHNEGII GQNG GQI DMYICG LDE#G CQNEWI)
VG RHDUVFIF DEJK GQNG GQI DMYICG LDE#G CQNEWI XVN GQNG RDVEGIH.
9. (CDEFG VEG- R( UINEF (R RHDUVFIF EDG GD CQNEWI GQI -R!( EDG (-R
RHDUVFIF EDG GD CQNEWI.(
CNOFVEW N CDEFG VEG- GD RDVEG GD NE VEG SDIFE#G CDEFG,VPK GQI VEG. TQI VEG
CNE#G MI CQNEWIS XVN GQI CDEFG VEG-! MOG VP FDUIDEI IJFI QNF N VEG- (EDGI& ED
CDEFG GQNG RDVEGF GD ((NJVNFIF( GQI FNUI VEG! GQIE GQNG VEG- CNE MI OFIS GD
CQNEWI GQI VEG. FDH IZNURJI&
XDVS P(CDEFG VEG- R1! VEG- R2
/
VEG V 2 -R1) '' GIG GQI (DHVWVENJ XNJOI DP -R11 -R2 2 B)
'' IP R1 22 R2! GQVF LVJJ NJFD CQNEWI -R1
VEG Y 2 -R1) '' GIG GQI (RDFFVMJK EIL XNJOI DP -R1
VP (V =2 Y /
CDOG ;; (-R1 CQNEWIS! MOG VG SVSE#G CQNEWI XVN RDVEGIH R1=AE()
NFFIHG(R1 22 R2) '' TQVF VF GQI DEJK LNK -R1 CDOJS MI SVPPIHIEG
0
0
UNVE(
/
VEG Z)
P(>Z! >Z) '' TQVF VF RIHPICGJK JIWNJ (NES IXIE UDHNJ=
0
NDGI GQNG UNVE( NES P(CDEFG VEG-!VEG- CDOJS MI VE SVPPIHIEG CDURVJNGVDE OEVGF
GQNG NHI CDURVJIS DE SVPPIHIEG SNKF DP GQI LIIT. IE GQNG CNFI GQIHI VF ED LNK
GQI CDURVJIH CNE RDFFVMJK SIGICG GQI NJVNFVEW NG CDURVJI GVUI. TQIHIPDHI GQIHI
VF ED LNK LI CDOJS UNTI N JNEWONWI HOJI GQNG RHDQVMVGF GQVF FDHG DP GQVEW. IE
PNCG! LI LDOJSE#G IXIE LNEG GD UNTI FOCQ N HOJI! FVECI VE WIEIHNJ VG#F
CDEFVSIHIS N PINGOHI GQNG KDO CNE QNXI UNEK RDVEGIHF RDVEGVEW GD GQI FNUI
GQVEW. TQI PNCG GQNG DEI DP GQDFI RDVEGIHF RHDUVFIF EDG GD CQNEWI GQI
OESIHJKVEW (GQVEW( VF YOFG N RHDUVFI UNSI MK GQI RDVEGIH) VG#F EDG N RHDUVFI
UNSI MK GQI (GQVEW(.
1.
IN!ERITANCE
1. IEQIHVGNECI VF LQNG FIRNHNGIF NMFGHNCG SNGN GKRI (ADT RHDWHNUUVEW PHDU OO
RHDWHNUUVEW.
222222222222222222222222222222222222222222222222222222222222222222222222222222
316.25 WQIE LDOJS I OFI VEQIHVGNECI?
AF N FRICVPVCNGVDE SIXVCI.
CJNFF CNH & ROMJVC VIQVCJI /
ROMJVC&
'' ...
0)
WI FGNGI GQI NMDXI HIJNGVDEFQVR VE FIXIHNJ LNKF&
- CNH VF (N TVES DP N( VIQVCJI
- CNH VF (SIHVXIS PHDU( VIQVCJI
- CNH VF (N FRICVNJV\IS( VIQVCJI
- CNH VF GQI (FOMCJNFF( DP VIQVCJI
- VIQVCJI VF GQI (MNFI CJNFF( DP CNH
- VIQVCJI VF GQI (FORIHCJNFF( DP CNH (GQVF EDG NF CDUUDE VE GQI C%% CDUUOEVGK
2. VG OK GD CDEXIHG N RDVEGIH PHDU N SIHVXIS CJNFF GD VGF MNFI CJNFF?
YIF.
AE DMYICG DP N SIHVXIS CJNFF VF N TVES DP GQI MNFI CJNFF. TQIHIPDHI GQI
CDEXIHFVDE PHDU N SIHVXIS CJNFF RDVEGIH GD N MNFI CJNFF RDVEGIH VF RIHPICGJK
FNPI! NES QNRRIEF NJJ GQI GVUI. FDH IZNURJI! VP I NU RDVEGVEW NG N CNH! I NU
VE PNCG RDVEGVEW NG N XIQVCJI! FD CDEXIHGVEW N CNH- GD N VIQVCJI- VF RIHPICGJK
FNPI NES EDHUNJ&
XDVS P(VIQVCJI- X)
XDVS W(CNH- C / P(C) 0 '' PIHPICGJK FNPI) ED CNFG
3. GQI SVPPIHIECI MIGLIIE ROMJVC&! RHVXNGI&! NES RHDGICGIS&?
- A UIUMIH (IVGQIH SNGN UIUMIH DH UIUMIH POECGVDE SICJNHIS VE N RHVXNGI&
FICGVDE DP N CJNFF CNE DEJK MI NCCIFFIS MK UIUMIH POECGVDEF NES PHVIESF3145
DP GQNG CJNFF
- A UIUMIH (IVGQIH SNGN UIUMIH DH UIUMIH POECGVDE SICJNHIS VE N RHDGICGIS&
FICGVDE DP N CJNFF CNE DEJK MI NCCIFFIS MK UIUMIH POECGVDEF NES PHVIESF3145
DP GQNG CJNFF! NES MK UIUMIH POECGVDEF NES PHVIESF3145 DP SIHVXIS CJNFFIF
- A UIUMIH (IVGQIH SNGN UIUMIH DH UIUMIH POECGVDE SICJNHIS VE N ROMJVC&
FICGVDE DP N CJNFF CNE MI NCCIFFIS MK NEKDEI
4. DIHVXIS CJNFFIF SD EDG WIG NCCIFF GD RHVXNGI UIUMIHF DP N MNFI CJNFF. TQVF
IPPICGVXIJK (FINJF DPP( GQI SIHVXIS CJNFF PHDU NEK CQNEWIF UNSI GD GQI RHVXNGI
UIUMIHF DP GQI MNFI CJNFF.
5. A CJNFF QNF GLD SVFGVECG VEGIHPNCIF PDH GLD SVFGVECG FIGF DP CJVIEGF&
- IG QNF N ROMJVC& VEGIHPNCI GQNG FIHXIF OEHIJNGIS CJNFFIF
- IG QNF N RHDGICGIS& VEGIHPNCI GQNG FIHXIF SIHVXIS CJNFFIF
UEJIFF KDO IZRICG NJJ KDOH FOMCJNFFIF GD MI MOVJG MK KDOH DLE GINU! KDO FQDOJS
CDEFVSIH UNTVEW KDOH MNFI CJNFF#F MVGF MI RHVXNGI&! NES OFI RHDGICGIS& VEJVEI
NCCIFF POECGVDEF MK LQVCQ SIHVXIS CJNFFIF LVJJ NCCIFF GQI RHVXNGI SNGN VE GQI
MNFI CJNFF. TQVF LNK GQI RHVXNGI MVGF CNE CQNEWI! MOG GQI SIHVXIS CJNFF#F CDSI
LDE#G MHINT OEJIFF KDO CQNEWI GQI RHDGICGIS NCCIFF POECGVDEF.
*. DIHVXIS- ,,: BNFI- LDHTF OK) LQK SDIFE#G DIHVXIS-- ,,: BNFI-- LDHT?
1C%% NJJDLF N DIHVXIS- GD MI CDEXIHGIS GD N BNFI-! FVECI N DIHVXIS DMYICG VF N
TVES DP N BNFI DMYICG. HDLIXIH GHKVEW GD CDEXIHG N DIHVXIS-- GD N BNFI-- VF
+,'--./ '0 '1 .2232.
B. NE NHHNK DP DIHVXIS N TVES,DP NHHNK DP BNFI?
NDRI. TQI HDDG RHDMJIU VF GQNG C%% CNE#G SVFGVEWOVFQ MIGLIIE N RDVEGIH,GD,N,
GQVEW NES
N RDVEGIH,GD,NE,NHHNK,DP,GQVEWF. NNGOHNJJK C%% (VEQIHVGIS( GQVF PINGOHI PHDU
C.
7.
VIRTUAL FUNCTIONS
1. FHDU NE OO RIHFRICGVXI! VG VF GQI FVEWJI UDFG VURDHGNEG PINGOHI DP C%%&
3*.75!
3*.65.
A XVHGONJ POECGVDE NJJDLF SIHVXIS CJNFFIF GD HIRJNCI GQI VURJIUIEGNGVDE
RHDXVSIS MK GQI MNFI CJNFF. TQI CDURVJIH UNTIF FOHI GQI HIRJNCIUIEG VF NJLNKF
CNJJIS LQIEIXIH GQI DMYICG VE [OIFGVDE VF NCGONJJK DP GQI SIHVXIS CJNFF! IXIE
VP GQI DMYICG VF NCCIFFIS MK N MNFI RDVEGIH HNGQIH GQNE N SIHVXIS RDVEGIH.
TQVF NJJDLF NJWDHVGQUF VE GQI MNFI CJNFF GD MI HIRJNCIS VE GQI SIHVXIS CJNFF!
IXIE VP OFIHF SDE#G TEDL NMDOG GQI SIHVXIS CJNFF.
TQI SIHVXIS CJNFF CNE IVGQIH POJJK HIRJNCI ((DXIHHVSI( GQI MNFI CJNFF UIUMIH
POECGVDE! DH GQI SIHVXIS CJNFF CNE RNHGVNJJK HIRJNCI ((NOWUIEG( GQI MNFI CJNFF
UIUMIH POECGVDE. TQI JNGGIH VF NCCDURJVFQIS MK QNXVEW GQI SIHVXIS CJNFF UIUMIH
+4156&31 5',, 67. 8'0. 5,'00 9.98.2 +4156&31, &+ /.0&2./.
2. WQIE KDO QNXI N RDVEGIH GD NE DMYICG! GQI DMYICG UNK NCGONJJK MI DP N CJNFF
GQNG VF SIHVXIS PHDU GQI CJNFF DP GQI RDVEGIH (I.W.! N VIQVCJI- GQNG VF
NCGONJJK RDVEGVEW GD N CNH DMYICG. TQOF GQIHI NHI GLD GKRIF& GQI (FGNGVC
GKRI DP GQI RDVEGIH (VIQVCJI! VE GQVF CNFI! NES GQI (SKENUVC GKRI DP GQI
RDVEGIS,GD DMYICG (CNH! VE GQVF CNFI.
SGNGVC GKRVEW UINEF GQNG GQI JIWNJVGK DP N UIUMIH POECGVDE VEXDCNGVDE VF
CQICTIS NG GQI INHJVIFG RDFFVMJI UDUIEG& MK GQI CDURVJIH NG CDURVJI GVUI. TQI
CDURVJIH OFIF GQI FGNGVC GKRI DP GQI RDVEGIH GD SIGIHUVEI LQIGQIH GQI UIUMIH
POECGVDE VEXDCNGVDE VF JIWNJ. IP GQI GKRI DP GQI RDVEGIH CNE QNESJI GQI UIUMIH
POECGVDE! CIHGNVEJK GQI RDVEGIS,GD DMYICG CNE QNESJI VG NF LIJJ. E.W.! VP
VIQVCJI QNF N CIHGNVE UIUMIH POECGVDE! CIHGNVEJK CNH NJFD QNF GQNG UIUMIH
POECGVDE FVECI CNH VF N TVES,DP VIQVCJI.
DKENUVC MVESVEW UINEF GQNG GQI NSSHIFF DP GQI CDSI VE N UIUMIH POECGVDE
VEXDCNGVDE VF SIGIHUVEIS NG GQI JNFG RDFFVMJI UDUIEG& MNFIS DE GQI SKENUVC GKRI
DP GQI DMYICG NG HOE GVUI. IG VF CNJJIS (SKENUVC MVESVEW( MICNOFI GQI MVESVEW
GD GQI CDSI GQNG NCGONJJK WIGF CNJJIS VF NCCDURJVFQIS SKENUVCNJJK (NG HOE
GVUI. DKENUVC MVESVEW VF N HIFOJG DP XVHGONJ POECGVDEF.
3. NDE,XVHGONJ UIUMIH POECGVDEF NHI HIFDJXIS FGNGVCNJJK. TQNG VF! GQI UIUMIH
POECGVDE VF FIJICGIS FGNGVCNJJK (NG CDURVJI,GVUI MNFIS DE GQI GKRI DP GQI
RDVEGIH (DH HIPIHIECI GD GQI DMYICG.
IE CDEGHNFG! XVHGONJ UIUMIH POECGVDEF NHI HIFDJXIS SKENUVCNJJK (NG HOE,GVUI.
TQNG VF! GQI UIUMIH POECGVDE VF FIJICGIS SKENUVCNJJK (NG HOE,GVUI MNFIS DE GQI
GKRI DP GQI DMYICG! EDG GQI GKRI DP GQI RDVEGIH'HIPIHIECI GD GQNG DMYICG. TQVF
VF CNJJIS (SKENUVC MVESVEW.( MDFG CDURVJIHF OFI FDUI XNHVNEG DP GQI PDJJDLVEW
GICQEV[OI& VP GQI DMYICG QNF DEI DH UDHI XVHGONJ POECGVDEF! GQI CDURVJIH ROGF N
QVSSIE RDVEGIH VE GQI DMYICG CNJJIS N (XVHGONJ,RDVEGIH( DH (X,RDVEGIH.( TQVF
X,RDVEGIH RDVEGF GD N WJDMNJ GNMJI CNJJIS GQI (XVHGONJ,GNMJI( DH (X,GNMJI.(
TQI CDURVJIH CHINGIF N X,GNMJI PDH INCQ CJNFF GQNG QNF NG JINFG DEI XVHGONJ
POECGVDE. FDH IZNURJI! VP CJNFF CVHCJI QNF XVHGONJ POECGVDEF PDH SHNL( NES
UDXI( NES HIFV\I(! GQIHI LDOJS MI IZNCGJK DEI X,GNMJI NFFDCVNGIS LVGQ CJNFF
CVHCJI! IXIE VP GQIHI LIHI N WN\VJJVDE CVHCJI DMYICGF! NES GQI X,RDVEGIH DP
INCQ DP GQDFI CVHCJI DMYICGF LDOJS RDVEG GD GQI CVHCJI X,GNMJI. TQI X,GNMJI
VGFIJP QNF RDVEGIHF GD INCQ DP GQI XVHGONJ POECGVDEF VE GQI CJNFF. FDH
IZNURJI! GQI CVHCJI X,GNMJI LDOJS QNXI GQHII RDVEGIHF& N RDVEGIH GD
CVHCJI&&SHNL(! N RDVEGIH GD CVHCJI&&UDXI(! NES N RDVEGIH GD CVHCJI&&HIFV\I(.
DOHVEW N SVFRNGCQ DP N XVHGONJ POECGVDE! GQI HOE,GVUI FKFGIU PDJJDLF GQI
DMYICG#F X,RDVEGIH GD GQI CJNFF#F X,GNMJI! GQIE PDJJDLF GQI NRRHDRHVNGI FJDG VE
GQI X,GNMJI GD GQI UIGQDS CDSI.
TQI FRNCI,CDFG DXIHQINS DP GQI NMDXI GICQEV[OI VF EDUVENJ& NE IZGHN RDVEGIH
RIH1DMYICG (MOG DEJK PDH DMYICGF GQNG LVJJ EIIS GD SD SKENUVC MVESVEW! RJOF NE
IZGHN RDVEGIH RIH UIGQDS (MOG DEJK PDH XVHGONJ UIGQDSF. TQI GVUI,CDFG
DXIHQINS VF NJFD PNVHJK EDUVENJ& CDURNHIS GD N EDHUNJ POECGVDE CNJJ! N XVHGONJ
POECGVDE CNJJ HI[OVHIF GLD IZGHN PIGCQIF (DEI GD WIG GQI XNJOI DP GQI
X,RDVEGIH! N FICDES GD WIG GQI NSSHIFF DP GQI UIGQDS. NDEI DP GQVF HOEGVUI
NCGVXVGK QNRRIEF LVGQ EDE,XVHGONJ POECGVDEF! FVECI GQI CDURVJIH HIFDJXIF
EDE,XVHGONJ POECGVDEF IZCJOFVXIJK NG CDURVJI,GVUI MNFIS DE GQI GKRI DP GQI
RDVEGIH.
NDGI& GQI NMDXI SVFCOFFVDE VF FVURJVPVIS CDEFVSIHNMJK! FVECI VG SDIFE#G NCCDOEG
PDH IZGHN FGHOCGOHNJ GQVEWF JVTI UOJGVRJI VEQIHVGNECI! XVHGONJ VEQIHVGNECI!
RTTI! IGC.! EDH SDIF VG NCCDOEG PDH FRNCI'FRIIS VFFOIF FOCQ NF RNWI PNOJGF!
CNJJVEW N POECGVDE XVN N RDVEGIH,GD,POECGVDE! IGC. IP KDO LNEG GD TEDL NMDOG
GQDFI DGQIH GQVEWF! RJINFI NFT CDUR.JNEW.C%%) PLEASE DO NOT SEND E,MAIL TO ME=
4. 324.45 WQIE FQDOJS UK SIFGHOCGDH MI XVHGONJ?
WQIE KDO UNK SIJIGI N SIHVXIS DMYICG XVN N MNFI RDVEGIH.
XVHGONJ POECGVDEF MVES GD GQI CDSI NFFDCVNGIS LVGQ GQI CJNFF DP GQI DMYICG!
HNGQIH GQNE LVGQ GQI CJNFF DP GQI RDVEGIH'HIPIHIECI. WQIE KDO FNK
SIJIGI MNFIPGH! NES GQI MNFI CJNFF QNF N XVHGONJ SIFGHOCGDH! GQI SIFGHOCGDH
GQNG WIGF VEXDTIS VF GQI DEI NFFDCVNGIS LVGQ GQI GKRI DP GQI DMYICG -MNFIPGH!
HNGQIH GQNE GQI DEI NFFDCVNGIS LVGQ GQI GKRI DP GQI RDVEGIH. TQVF VF WIEIHNJJK
A GDDS TQVEW.
5. 324.55 WQNG VF N (XVHGONJ CDEFGHOCGDH(?
AE VSVDU GQNG NJJDLF KDO GD SD FDUIGQVEW GQNG C%% SDIFE#G SVHICGJK FORRDHG.
YDO CNE WIG GQI IPPICG DP N XVHGONJ CDEFGHOCGDH MK N XVHGONJ CJDEI(
UIUMIH1POECGVDE (PDH CDRK CDEFGHOCGVEW! DH N XVHGONJ CHINGI( UIUMIH POECGVDE
(PDH
GQI SIPNOJG CDEFGHOCGDH314.45.
CJNFF SQNRI /
ROMJVC&
XVHGONJ 9SQNRI( / 0 '' A XVHGONJ SIFGHOCGDH324.45
XVHGONJ XDVS SHNL( 2 4) '' A ROHI XVHGONJ POECGVDE322.45
XVHGONJ XDVS UDXI( 2 4)
'' ...
XVHGONJ SQNRI- CJDEI( CDEFG 2 4) '' UFIF GQI CDRK CDEFGHOCGDH
XVHGONJ SQNRI- CHINGI( CDEFG 2 4) '' UFIF GQI SIPNOJG CDEFGHOCGDH314.45
0)
CJNFF CVHCJI & ROMJVC SQNRI /
ROMJVC&
CVHCJI- CJDEI( CDEFG / HIGOHE EIL CVHCJI(-GQVF) 0
CVHCJI- CHINGI( CDEFG / HIGOHE EIL CVHCJI() 0
'' ...
0)
IE GQI CJDEI( UIUMIH POECGVDE! GQI EIL CVHCJI(-GQVF CDSI CNJJF CVHCJI#F CDRK
CDEFGHOCGDH GD CDRK GQI FGNGI DP GQVF VEGD GQI EILJK CHINGIS CVHCJI DMYICG. IE
GQI CHINGI( UIUMIH POECGVDE! GQI EIL CVHCJI( CDSI CNJJF CVHCJI#F SIPNOJG
CDEFGHOCGDH314.45.
UFIHF OFI GQIFI NF VP GQIK LIHI (XVHGONJ CDEFGHOCGDHF(&
XDVS OFIHCDSI(SQNRI> F
/
SQNRI- F2 2 F.CJDEI()
SQNRI- F3 2 F.CHINGI()
'' ...
SIJIGI F2) '' YDO RHDMNMJK EIIS N XVHGONJ SIFGHOCGDH324.45 QIHI
SIJIGI F3)
0
TQVF POECGVDE LVJJ LDHT CDHHICGJK HIWNHSJIFF DP LQIGQIH GQI SQNRI VF N CVHCJI!
S[ONHI! DH FDUI DGQIH TVES,DP SQNRI GQNG SDIFE#G IXIE IZVFG KIG.
*. WQNG VF NE ABC?
AE NMFGHNCG MNFI CJNFF.
AG GQI SIFVWE JIXIJ! NE NMFGHNCG MNFI CJNFF (ABC CDHHIFRDESF GD NE NMFGHNCG
CDECIRG. IP KDO NFTIS N UICQNEVC VP QI HIRNVHIS XIQVCJIF! QI#S RHDMNMJK LDESIH
LQNG TVES,DP XIQVCJI KDO QNS VE UVES. CQNECIF NHI QI SDIFE#G HIRNVH FRNCI
FQOGGJIF! DCINE JVEIHF! MVCKCJIF! DH EOCJINH FOMUNHVEIF. TQI RHDMJIU VF GQNG
GQI GIHU (XIQVCJI( VF NE NMFGHNCG CDECIRG (I.W.! KDO CNE#G MOVJS N (XIQVCJI(
OEJIFF KDO TEDL LQNG TVES DP XIQVCJI GD MOVJS. IE C%%! CJNFF VIQVCJI LDOJS MI
NE ABC! LVGQ BVCKCJI! SRNCISQOGGJI! IGC! MIVEW FOMCJNFFIF (NE OCINELVEIH
VF,N,TVES,DP,N VIQVCJI. IE HINJ,LDHJS OO! ABCF FQDL OR NJJ DXIH GQI RJNCI.
AG GQI RHDWHNUUVEW JNEWONWI JIXIJ! NE ABC VF N CJNFF GQNG QNF DEI DH UDHI ROHI
XVHGONJ322.45 UIUMIH POECGVDEF. YDO CNEEDG UNTI NE DMYICG (VEFGNECI DP NE
ABC.
B. WQNG VF N (ROHI XVHGONJ( UIUMIH POECGVDE?
A UIUMIH POECGVDE SICJNHNGVDE GQNG GOHEF N EDHUNJ CJNFF VEGD NE NMFGHNCG CJNFF
(V.I.! NE ABC. YDO EDHUNJJK DEJK VURJIUIEG VG VE N SIHVXIS CJNFF.
SDUI UIUMIH POECGVDEF IZVFG VE CDECIRG) GQIK SDE#G QNXI NEK HINFDENMJI
SIPVEVGVDE. E.W.! FORRDFI I NFTIS KDO GD SHNL N SQNRI NG JDCNGVDE (Z!K GQNG
QNF FV\I B. YDO#S NFT UI (LQNG TVES DP FQNRI FQDOJS I SHNL?( (CVHCJIF!1F[ONHIF!
QIZNWDEF! IGC! NHI SHNLE SVPPIHIEGJK. IE C%%! LI UOFG VESVCNGI GQI
IZVFGIECI DP GQI SHNL( UIUMIH POECGVDE (FD OFIHF CNE CNJJ VG LQIE GQIK QNXI N
SQNRI- DH N SQNRI>! MOG LI HICDWEV\I VG CNE (JDWVCNJJK MI SIPVEIS DEJK VE
FOMCJNFFIF&
CJNFF SQNRI /
ROMJVC&
XVHGONJ XDVS SHNL( CDEFG 2 4) '' 2 4 UINEF VG VF (ROHI XVHGONJ(
'' ...
0)
TQVF ROHI XVHGONJ POECGVDE UNTIF SQNRI NE ABC. IP KDO LNEG! KDO CNE GQVET DP
GQI (2 4)( FKEGNZ NF VP GQI CDSI LIHI NG GQI NULL RDVEGIH. TQOF SQNRI RHDUVFIF
N FIHXVCI GD VGF OFIHF! KIG SQNRI VFE#G NMJI GD RHDXVSI NEK CDSI GD POJPVJJ
GQNG RHDUVFI. TQVF PDHCIF NEK NCGONJ DMYICG CHINGIS PHDU N 3CDECHIGI5 CJNFF
SIHVXIS PHDU SQNRI GD QNXI GQI VESVCNGIS UIUMIH POECGVDE! IXIE GQDOWQ GQI MNFI
CJNFF SDIFE#G QNXI IEDOWQ VEPDHUNGVDE GD NCGONJJK SIPVEI VG KIG.
NDGI GQNG VG VF RDFFVMJI GD RHDXVSI N SIPVEVGVDE PDH N ROHI XVHGONJ POECGVDE!
MOG GQVF OFONJJK CDEPOFIF EDXVCIF NES VF MIFG NXDVSIS OEGVJ JNGIH.
7. IP GQI CJNFF (DLEF( GQI DMYICG RDVEGIS GD MK GQI (NMFGHNCG MNFI CJNFF
RDVEGIH!
OFI GQI VVHGONJ CDEFGHOCGDH ISVDU324.55 VE GQI (NMFGHNCG MNFI CJNFF. AF OFONJ
LVGQ GQVF VSVDU! LI SICJNHI N ROHI XVHGONJ322.45 CJDEI( UIGQDS VE GQI MNFI
CJNFF&
CJNFF SQNRI /
ROMJVC&
'' ...
XVHGONJ SQNRI- CJDEI( CDEFG 2 4) '' TQI VVHGONJ (CDRK
CDEFGHOCGDH324.55
'' ...
0)
TQIE LI VURJIUIEG GQVF CJDEI( UIGQDS VE INCQ SIHVXIS CJNFF&
CJNFF CVHCJI /
ROMJVC&
'' ...
XVHGONJ SQNRI- CJDEI( CDEFG / HIGOHE EIL CVHCJI(-GQVF) 0
'' ...
0)
CJNFF S[ONHI /
ROMJVC&
'' ...
XVHGONJ SQNRI- CJDEI( CDEFG / HIGOHE EIL S[ONHI(-GQVF) 0
'' ...
0)
NDL FORRDFI GQNG INCQ FHIS DMYICG (QNF,N( SQNRI DMYICG. NNGOHNJJK GQI FHIS
DMYICG SDIFE#G TEDL LQIGQIH GQI SQNRI VF CVHCJI DH N S[ONHI DH ... FHIS#F CDRK
CDEFGHOCGDH NES NFFVWEUIEG DRIHNGDH LVJJ VEXDTI SQNRI#F CJDEI( UIGQDS GD CDRK
GQI DMYICG&1
CJNFF FHIS /
ROMJVC&
FHIS(SQNRI- R & R<(R / NFFIHG(R =2 NULL) 0 '' R UOFG EDG MI NULL
9FHIS( / SIJIGI R) 0
FHIS(CDEFG FHIS> P & R<(P.R<,:CJDEI( / 0
FHIS> DRIHNGDH2 (CDEFG FHIS> P
/
VP (GQVF =2 >P / '' CQICT PDH FIJP,NFFVWEUIEG
SQNRI- R2 2 P.R<,:CJDEI() '' CHINGI GQI EIL DEI FIRST...
SIJIGI R<) '' ...THEN SIJIGI GQI DJS DEI
R< 2 R2)
0
HIGOHE -GQVF)
0
'' ...
RHVXNGI&
SQNRI- R<)
0)

You might also like