30

Basic Concepts C++

Embed Size (px)

Citation preview

Page 1: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 1/29

A Q u i c k I n t r o d u c t i o n t o C + +          

T o m A n d e r s o n  

\ I f p r o g r a m m i n g i n P a s c a l i s l i k e b e i n g p u t i n a s t r a i g h t j a c k e t , t h e n p r o g r a m -  

m i n g i n C i s l i k e p l a y i n g w i t h k n i v e s , a n d p r o g r a m m i n g i n C + + i s l i k e j u g g l i n g  

c h a i n s a w s . "  

A n o n y m o u s .  

1 I n t r o d u c t i o n      

T h i s n o t e i n t r o d u c e s s o m e s i m p l e C + + c o n c e p t s a n d o u t l i n e s a s u b s e t o f C + + t h a t i s e a s i e r  

t o l e a r n a n d u s e t h a n t h e f u l l l a n g u a g e . A l t h o u g h w e o r i g i n a l l y w r o t e t h i s n o t e f o r e x p l a i n i n g  

t h e C + + u s e d i n t h e N a c h o s p r o j e c t , I b e l i e v e i t i s u s e f u l t o a n y o n e l e a r n i n g C + + . I a s s u m e  

t h a t y o u a r e a l r e a d y s o m e w h a t f a m i l i a r w i t h C c o n c e p t s l i k e p r o c e d u r e s , f o r l o o p s , a n d  

p o i n t e r s ; t h e s e a r e p r e t t y e a s y t o p i c k u p f r o m r e a d i n g K e r n i g h a n a n d R i t c h i e ' s \ T h e C  

P r o g r a m m i n g L a n g u a g e . "  

I s h o u l d a d m i t u p f r o n t t h a t I a m q u i t e o p i n i o n a t e d a b o u t C + + , i f t h a t i s n ' t o b v i o u s  

a l r e a d y . I k n o w s e v e r a l C + + p u r i s t s ( a n o x y m o r o n p e r h a p s ? ) w h o v i o l e n t l y d i s a g r e e w i t h  

s o m e o f t h e p r e s c r i p t i o n s c o n t a i n e d h e r e ; m o s t o f t h e o b j e c t i o n s a r e o f t h e f o r m , \ H o w c o u l d  

y o u h a v e p o s s i b l y l e f t o u t f e a t u r e X ? " H o w e v e r , I ' v e f o u n d f r o m t e a c h i n g C + + t o n e a r l y  

1 0 0 0 u n d e r g r a d s o v e r t h e p a s t s e v e r a l y e a r s t h a t t h e s u b s e t o f C + + d e s c r i b e d h e r e i s p r e t t y  

e a s y t o l e a r n , t a k i n g o n l y a d a y o r s o f o r m o s t s t u d e n t s t o g e t s t a r t e d .  

T h e b a s i c p r e m i s e o f t h i s n o t e i s t h a t w h i l e o b j e c t - o r i e n t e d p r o g r a m m i n g i s a u s e f u l w a y  

t o s i m p l i f y p r o g r a m s , C + + i s a w i l d l y o v e r - c o m p l i c a t e d l a n g u a g e , w i t h a h o s t o f f e a t u r e s  

t h a t o n l y v e r y , v e r y r a r e l y n d a l e g i t i m a t e u s e . I t ' s n o t t o o f a r o t h e m a r k t o s a y t h a t  

C + + i n c l u d e s e v e r y p r o g r a m m i n g l a n g u a g e f e a t u r e e v e r i m a g i n e d , a n d m o r e . T h e n a t u r a l  

t e n d e n c y w h e n f a c e d w i t h a n e w l a n g u a g e f e a t u r e i s t o t r y t o u s e i t , b u t i n C + + t h i s  

a p p r o a c h l e a d s t o d i s a s t e r .  

T h u s , w e n e e d t o c a r e f u l l y d i s t i n g u i s h b e t w e e n ( i ) t h o s e c o n c e p t s t h a t a r e f u n d a m e n t a l  

( e . g . , c l a s s e s , m e m b e r f u n c t i o n s , c o n s t r u c t o r s ) { o n e s t h a t e v e r y o n e s h o u l d k n o w a n d u s e ,  

( i i ) t h o s e t h a t a r e s o m e t i m e s b u t r a r e l y u s e f u l ( e . g . , s i n g l e i n h e r i t a n c e , t e m p l a t e s ) { o n e s  

t h a t b e g i n n e r p r o g r a m m e r s s h o u l d b e a b l e t o r e c o g n i z e ( i n c a s e t h e y r u n a c r o s s t h e m ) b u t  

a v o i d u s i n g i n t h e i r o w n p r o g r a m s , a t l e a s t f o r a w h i l e , a n d ( i i i ) t h o s e t h a t a r e j u s t a b a d i d e a  

a n d s h o u l d b e a v o i d e d l i k e t h e p l a g u e ( e . g . , m u l t i p l e i n h e r i t a n c e , e x c e p t i o n s , o v e r l o a d i n g ,  

r e f e r e n c e s , e t c ) .  

O f c o u r s e , a l l t h e i t e m s i n t h i s l a s t c a t e g o r y h a v e t h e i r p r o p o n e n t s , a n d I w i l l a d m i t t h a t ,  

l i k e t h e h a t e d g o t o , i t i s p o s s i b l e t o c o n s t r u c t c a s e s w h e n t h e p r o g r a m w o u l d b e s i m p l e r  

T h i s a r t i c l e i s b a s e d o n a n e a r l i e r v e r s i o n w r i t t e n b y W a y n e C h r i s t o p h e r .  

Page 2: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 2/29

u s i n g a g o t o o r m u l t i p l e i n h e r i t a n c e . H o w e v e r , i t i s m y b e l i e f t h a t m o s t p r o g r a m m e r s w i l l  

n e v e r e n c o u n t e r s u c h c a s e s , a n d e v e n i f y o u d o , y o u w i l l b e m u c h m o r e l i k e l y t o m i s u s e t h e  

f e a t u r e t h a n p r o p e r l y a p p l y i t . F o r e x a m p l e , I s e r i o u s l y d o u b t a n u n d e r g r a d u a t e w o u l d n e e d  

a n y o f t h e f e a t u r e s l i s t e d u n d e r ( i i i ) f o r a n y c o u r s e p r o j e c t ( a t l e a s t a t B e r k e l e y t h i s i s t r u e ) .  

A n d i f y o u n d y o u r s e l f w a n t i n g t o u s e a f e a t u r e l i k e m u l t i p l e i n h e r i t a n c e , t h e n , m y a d v i c e i s  

t o f u l l y i m p l e m e n t y o u r p r o g r a m b o t h w i t h a n d w i t h o u t t h e f e a t u r e , a n d c h o o s e w h i c h e v e r  

i s s i m p l e r . S u r e , t h i s t a k e s m o r e e o r t , b u t p r e t t y s o o n y o u ' l l k n o w f r o m e x p e r i e n c e w h e n a  

f e a t u r e i s u s e f u l a n d w h e n i t i s n ' t , a n d y o u ' l l b e a b l e t o s k i p t h e d u a l i m p l e m e n t a t i o n .  

A r e a l l y g o o d w a y t o l e a r n a l a n g u a g e i s t o r e a d c l e a r p r o g r a m s i n t h a t l a n g u a g e . I h a v e  

t r i e d t o m a k e t h e N a c h o s c o d e a s r e a d a b l e a s p o s s i b l e ; i t i s w r i t t e n i n t h e s u b s e t o f C + +  

d e s c r i b e d i n t h i s n o t e . I t i s a g o o d i d e a t o l o o k o v e r t h e r s t a s s i g n m e n t a s y o u r e a d t h i s  

i n t r o d u c t i o n . O f c o u r s e , y o u r T A ' s w i l l a n s w e r a n y q u e s t i o n s y o u m a y h a v e .  

Y o u s h o u l d n o t n e e d a b o o k o n C + + t o d o t h e N a c h o s a s s i g n m e n t s , b u t i f y o u a r e c u r i o u s ,  

t h e r e i s a l a r g e s e l e c t i o n o f C + + b o o k s a t C o d y ' s a n d o t h e r t e c h n i c a l b o o k s t o r e s . ( M y w i f e  

q u i p s t h a t C + + w a s i n v e n t e d t o m a k e r e s e a r c h e r s a t B e l l L a b s r i c h f r o m w r i t i n g \ H o w t o  

P r o g r a m i n C + + " b o o k s . ) M o s t n e w s o f t w a r e d e v e l o p m e n t t h e s e d a y s i s b e i n g d o n e i n  

C + + , s o i t i s a p r e t t y g o o d b e t y o u ' l l r u n a c r o s s i t i n t h e f u t u r e . I u s e S t r o u s t r u p ' s " T h e  

C + + P r o g r a m m i n g L a n g u a g e " a s a r e f e r e n c e m a n u a l , a l t h o u g h o t h e r b o o k s m a y b e m o r e  

r e a d a b l e . I w o u l d a l s o r e c o m m e n d S c o t t M e y e r ' s \ E e c t i v e C + + " f o r p e o p l e j u s t b e g i n n i n g  

t o l e a r n t h e l a n g u a g e , a n d C o p l i e n ' s \ A d v a n c e d C + + " o n c e y o u ' v e b e e n p r o g r a m m i n g i n  

C + + f o r a c o u p l e y e a r s a n d a r e f a m i l i a r w i t h t h e l a n g u a g e b a s i c s . A l s o , C + + i s c o n t i n u a l l y  

e v o l v i n g , s o b e c a r e f u l t o b u y b o o k s t h a t d e s c r i b e t h e l a t e s t v e r s i o n ( c u r r e n t l y 3 . 0 , I t h i n k ! ) .  

2 C i n C + +        

T o a l a r g e e x t e n t , C + + i s a s u p e r s e t o f C , a n d m o s t c a r e f u l l y w r i t t e n A N S I C w i l l c o m p i l e  

a s C + + . T h e r e a r e a f e w m a j o r c a v e a t s t h o u g h :  

1 . A l l f u n c t i o n s m u s t b e d e c l a r e d b e f o r e t h e y a r e u s e d , r a t h e r t h a n d e f a u l t i n g t o t y p e  

i n t  . 

2 . A l l f u n c t i o n d e c l a r a t i o n s a n d d e n i t i o n h e a d e r s m u s t u s e n e w - s t y l e d e c l a r a t i o n s , e . g . ,  

e x t e r n i n t f o o ( i n t a , c h a r * b ) ;  

T h e f o r m   e x t e r n i n t f o o ( ) ;   m e a n s t h a t   f o o  t a k e s   n o  a r g u m e n t s , r a t h e r t h a n a r g u -  

m e n t s o f a n u n s p e c i e d t y p e a n d n u m b e r . I n f a c t , s o m e a d v i s e u s i n g a C + + c o m p i l e r  

e v e n o n n o r m a l C c o d e , b e c a u s e i t w i l l c a t c h e r r o r s l i k e m i s u s e d f u n c t i o n s t h a t a n o r m a l  

C c o m p i l e r w i l l l e t s l i d e .  

3 . I f y o u n e e d t o l i n k C o b j e c t l e s t o g e t h e r w i t h C + + , w h e n y o u d e c l a r e t h e C f u n c t i o n s  

f o r t h e C + + l e s , t h e y m u s t b e d o n e l i k e t h i s :  

Page 3: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 3/29

e x t e r n " C " i n t f o o ( i n t a , c h a r * b ) ;  

O t h e r w i s e t h e C + + c o m p i l e r w i l l a l t e r t h e n a m e i n a s t r a n g e m a n n e r .  

4 . T h e r e a r e a n u m b e r o f n e w k e y w o r d s , w h i c h y o u m a y n o t u s e a s i d e n t i e r s | s o m e  

c o m m o n o n e s a r e   n e w  ,  d e l e t e   ,  c o n s t  , a n d   c l a s s   . 

3 B a s i c C o n c e p t s    

B e f o r e g i v i n g e x a m p l e s o f C + + f e a t u r e s , I w i l l r s t g o o v e r s o m e o f t h e b a s i c c o n c e p t s o f  

o b j e c t - o r i e n t e d l a n g u a g e s . I f t h i s d i s c u s s i o n a t r s t s e e m s a b i t o b s c u r e , i t w i l l b e c o m e  

c l e a r e r w h e n w e g e t t o s o m e e x a m p l e s .  

1 .  C l a s s e s a n d o b j e c t s  . A c l a s s i s s i m i l a r t o a C   s t r u c t u r e  , e x c e p t t h a t t h e d e n i t i o n  

o f t h e d a t a s t r u c t u r e ,   a n d  a l l o f t h e f u n c t i o n s t h a t o p e r a t e o n t h e d a t a s t r u c t u r e a r e  

g r o u p e d t o g e t h e r i n o n e p l a c e . A n   o b j e c t   i s a n i n s t a n c e o f a c l a s s ( a n i n s t a n c e o f t h e  

d a t a s t r u c t u r e ) ; o b j e c t s s h a r e t h e s a m e f u n c t i o n s w i t h o t h e r o b j e c t s o f t h e s a m e c l a s s ,  

b u t e a c h o b j e c t ( e a c h i n s t a n c e ) h a s i t s o w n c o p y o f t h e d a t a s t r u c t u r e . A c l a s s t h u s  

d e n e s t w o a s p e c t s o f t h e o b j e c t s : t h e   d a t a   t h e y c o n t a i n , a n d t h e   b e h a v i o r   t h e y h a v e .  

2 .  M e m b e r f u n c t i o n s  . T h e s e a r e f u n c t i o n s w h i c h a r e c o n s i d e r e d p a r t o f t h e o b j e c t a n d  

a r e d e c l a r e d i n t h e c l a s s d e n i t i o n . T h e y a r e o f t e n r e f e r r e d t o a s   m e t h o d s   o f t h e c l a s s .  

I n a d d i t i o n t o m e m b e r f u n c t i o n s , a c l a s s ' s b e h a v i o r i s a l s o d e n e d b y :  

( a ) W h a t t o d o w h e n y o u c r e a t e a n e w o b j e c t ( t h e   c o n s t r u c t o r   f o r t h a t o b j e c t ) { i n  

o t h e r w o r d s , i n i t i a l i z e t h e o b j e c t ' s d a t a .  

( b ) W h a t t o d o w h e n y o u d e l e t e a n o b j e c t ( t h e   d e s t r u c t o r   f o r t h a t o b j e c t ) .  

3 .  P r i v a t e v s . p u b l i c m e m b e r s  . A p u b l i c m e m b e r o f a c l a s s i s o n e t h a t c a n b e r e a d  

o r w r i t t e n b y a n y b o d y , i n t h e c a s e o f a d a t a m e m b e r , o r c a l l e d b y a n y b o d y , i n t h e  

c a s e o f a m e m b e r f u n c t i o n . A p r i v a t e m e m b e r c a n o n l y b e r e a d , w r i t t e n , o r c a l l e d b y  

a m e m b e r f u n c t i o n o f t h a t c l a s s .  

C l a s s e s a r e u s e d f o r t w o m a i n r e a s o n s : ( 1 ) i t m a k e s i t m u c h e a s i e r t o o r g a n i z e y o u r  

p r o g r a m s i f y o u c a n g r o u p t o g e t h e r d a t a w i t h t h e f u n c t i o n s t h a t m a n i p u l a t e t h a t d a t a , a n d  

( 2 ) t h e u s e o f p r i v a t e m e m b e r s m a k e s i t p o s s i b l e t o d o   i n f o r m a t i o n h i d i n g  , s o t h a t y o u c a n  

b e m o r e c o n d e n t a b o u t t h e w a y i n f o r m a t i o n o w s i n y o u r p r o g r a m s .  

3 . 1 C l a s s e s  

C + + c l a s s e s a r e s i m i l a r t o C s t r u c t u r e s i n m a n y w a y s . I n f a c t , a C + + s t r u c t i s r e a l l y a  

c l a s s t h a t h a s o n l y p u b l i c d a t a m e m b e r s . I n t h e f o l l o w i n g e x p l a n a t i o n o f h o w c l a s s e s w o r k ,  

w e w i l l u s e a s t a c k c l a s s a s a n e x a m p l e .  

Page 4: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 4/29

1 .  M e m b e r f u n c t i o n s .   H e r e i s a ( p a r t i a l ) e x a m p l e o f a c l a s s w i t h a m e m b e r f u n c t i o n  

a n d s o m e d a t a m e m b e r s :  

c l a s s S t a c k {  

p u b l i c :  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

i n t t o p ; / / I n d e x o f t h e t o p o f t h e s t a c k .  

i n t s t a c k 1 0 ] ; / / T h e e l e m e n t s o f t h e s t a c k .  

} ; 

v o i d  

S t a c k : : P u s h ( i n t v a l u e ) {  

A S S E R T ( t o p < 1 0 ) ; / / s t a c k s h o u l d n e v e r o v e r f l o w  

s t a c k t o p + + ] = v a l u e ;  

T h i s c l a s s h a s t w o d a t a m e m b e r s ,   t o p  a n d  s t a c k  , a n d o n e m e m b e r f u n c t i o n ,   P u s h  . 

T h e n o t a t i o n   c l a s s  : :   f u n c t i o n   d e n o t e s t h e    f u n c t i o n   m e m b e r o f t h e c l a s s   c l a s s   . ( I n t h e  

s t y l e w e u s e , m o s t f u n c t i o n n a m e s a r e c a p i t a l i z e d . ) T h e f u n c t i o n i s d e n e d b e n e a t h i t .  

A s a n a s i d e , n o t e t h a t w e u s e a c a l l t o   A S S E R T   t o c h e c k t h a t t h e s t a c k h a s n ' t o v e r o w e d ;  

A S S E R T d r o p s i n t o t h e d e b u g g e r i f t h e c o n d i t i o n i s f a l s e . I t i s a n e x t r e m e l y g o o d  

i d e a f o r y o u t o u s e A S S E R T s t a t e m e n t s l i b e r a l l y t h r o u g h o u t y o u r c o d e t o d o c u m e n t  

a s s u m p t i o n s m a d e b y y o u r i m p l e m e n t a t i o n . B e t t e r t o c a t c h e r r o r s a u t o m a t i c a l l y v i a  

A S S E R T s t h a n t o l e t t h e m g o b y a n d h a v e y o u r p r o g r a m o v e r w r i t e r a n d o m l o c a t i o n s .  

I n a c t u a l u s a g e , t h e d e n i t i o n o f   c l a s s S t a c k   w o u l d t y p i c a l l y g o i n t h e l e   s t a c k . h  

a n d t h e d e n i t i o n s o f t h e m e m b e r f u n c t i o n s , l i k e   S t a c k : : P u s h   , w o u l d g o i n t h e l e  

s t a c k . c c   . 

I f w e h a v e a p o i n t e r t o a   S t a c k   o b j e c t c a l l e d   s  , w e c a n a c c e s s t h e   t o p  e l e m e n t a s  

s - > t o p  , j u s t a s i n C . H o w e v e r , i n C + + w e c a n a l s o c a l l t h e m e m b e r f u n c t i o n u s i n g t h e  

f o l l o w i n g s y n t a x :  

s - > P u s h ( 1 7 ) ;  

O f c o u r s e , a s i n C ,   s  m u s t p o i n t t o a v a l i d   S t a c k   o b j e c t .  

I n s i d e a m e m b e r f u n c t i o n , o n e m a y r e f e r t o t h e m e m b e r s o f t h e c l a s s b y t h e i r n a m e s  

a l o n e . I n o t h e r w o r d s , t h e c l a s s d e n i t i o n c r e a t e s a s c o p e t h a t i n c l u d e s t h e m e m b e r  

( f u n c t i o n a n d d a t a ) d e n i t i o n s .  

N o t e t h a t i f y o u a r e i n s i d e a m e m b e r f u n c t i o n , y o u c a n g e t a p o i n t e r t o t h e o b j e c t y o u  

w e r e c a l l e d o n b y u s i n g t h e v a r i a b l e   t h i s  . I f y o u w a n t t o c a l l a n o t h e r m e m b e r f u n c t i o n  

o n t h e s a m e o b j e c t , y o u d o n o t n e e d t o u s e t h e   t h i s   p o i n t e r , h o w e v e r . L e t ' s e x t e n d  

t h e S t a c k e x a m p l e t o i l l u s t r a t e t h i s b y a d d i n g a   F u l l ( )   f u n c t i o n .  

Page 5: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 5/29

c l a s s S t a c k {  

p u b l i c :  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .

i n t t o p ; / / I n d e x o f t h e l o w e s t u n u s e d p o s i t i o n .  

i n t s t a c k 1 0 ] ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

Page 6: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 6/29

b o o l  

S t a c k : : F u l l ( ) {  

r e t u r n ( t o p = = 1 0 ) ;  

N o w w e c a n r e w r i t e   P u s h   t h i s w a y :  

v o i d  

S t a c k : : P u s h ( i n t v a l u e ) {  

A S S E R T ( ! F u l l ( ) ) ;  

s t a c k t o p + + ] = v a l u e ;  

W e c o u l d h a v e a l s o w r i t t e n t h e A S S E R T :  

A S S E R T ( ! ( t h i s - > F u l l ( ) ) ;  

b u t i n a m e m b e r f u n c t i o n , t h e   t h i s - >   i s i m p l i c i t .  

T h e p u r p o s e o f m e m b e r f u n c t i o n s i s t o e n c a p s u l a t e t h e f u n c t i o n a l i t y o f a t y p e o f o b j e c t  

a l o n g w i t h t h e d a t a t h a t t h e o b j e c t c o n t a i n s . A m e m b e r f u n c t i o n d o e s n o t t a k e u p  

s p a c e i n a n o b j e c t o f t h e c l a s s .  

2 .  P r i v a t e m e m b e r s .   O n e c a n d e c l a r e s o m e m e m b e r s o f a c l a s s t o b e   p r i v a t e   , w h i c h a r e  

h i d d e n t o a l l b u t t h e m e m b e r f u n c t i o n s o f t h a t c l a s s , a n d s o m e t o b e   p u b l i c   , w h i c h a r e  

v i s i b l e a n d a c c e s s i b l e t o e v e r y b o d y . B o t h d a t a a n d f u n c t i o n m e m b e r s c a n b e e i t h e r  

p u b l i c o r p r i v a t e .  

I n o u r s t a c k e x a m p l e , n o t e t h a t o n c e w e h a v e t h e   F u l l ( )   f u n c t i o n , w e r e a l l y d o n ' t  

n e e d t o l o o k a t t h e   t o p  o r  s t a c k   m e m b e r s o u t s i d e o f t h e c l a s s { i n f a c t , w e ' d r a t h e r  

t h a t u s e r s o f t h e S t a c k a b s t r a c t i o n   n o t  k n o w a b o u t i t s i n t e r n a l i m p l e m e n t a t i o n , i n c a s e  

w e c h a n g e i t . T h u s w e c a n r e w r i t e t h e c l a s s a s f o l l o w s :  

c l a s s S t a c k {  

p u b l i c :  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .

p r i v a t e :  

i n t t o p ; / / I n d e x o f t h e t o p o f t h e s t a c k .  

i n t s t a c k 1 0 ] ; / / T h e e l e m e n t s o f t h e s t a c k .  

} ; 

Page 7: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 7/29

B e f o r e , g i v e n a p o i n t e r t o a   S t a c k   o b j e c t , s a y   s  , a n y p a r t o f t h e p r o g r a m c o u l d a c c e s s  

s - > t o p  , i n p o t e n t i a l l y b a d w a y s . N o w , s i n c e t h e   t o p  m e m b e r i s p r i v a t e , o n l y a m e m b e r  

f u n c t i o n , s u c h a s   F u l l ( )  , c a n a c c e s s i t . I f a n y o t h e r p a r t o f t h e p r o g r a m a t t e m p t s t o  

u s e  s - > t o p   t h e c o m p i l e r w i l l r e p o r t a n e r r o r .  

Y o u c a n h a v e a l t e r n a t i n g   p u b l i c :   a n d  p r i v a t e :   s e c t i o n s i n a c l a s s . B e f o r e y o u s p e c i f y  

e i t h e r o f t h e s e , c l a s s m e m b e r s a r e p r i v a t e , t h u s t h e a b o v e e x a m p l e c o u l d h a v e b e e n  

w r i t t e n :  

c l a s s S t a c k {  

i n t t o p ; / / I n d e x o f t h e t o p o f t h e s t a c k .  

i n t s t a c k 1 0 ] ; / / T h e e l e m e n t s o f t h e s t a c k .  

p u b l i c :  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .

} ; 

W h i c h f o r m y o u p r e f e r i s a m a t t e r o f s t y l e , b u t i t ' s u s u a l l y b e s t t o b e e x p l i c i t , s o t h a t  

i t i s o b v i o u s w h a t i s i n t e n d e d . I n N a c h o s , w e m a k e e v e r y t h i n g e x p l i c i t .  

W h a t i s n o t a m a t t e r o f s t y l e :   a l l d a t a m e m b e r s o f a c l a s s s h o u l d b e p r i v a t e .   A l l 

o p e r a t i o n s o n d a t a s h o u l d b e v i a t h a t c l a s s ' m e m b e r f u n c t i o n s . K e e p i n g d a t a p r i v a t e  

a d d s t o t h e m o d u l a r i t y o f t h e s y s t e m , s i n c e y o u c a n r e d e n e h o w t h e d a t a m e m b e r s  

a r e s t o r e d w i t h o u t c h a n g i n g h o w y o u a c c e s s t h e m .  

3 .  C o n s t r u c t o r s a n d t h e o p e r a t o r n e w .   I n C , i n o r d e r t o c r e a t e a n e w o b j e c t o f t y p e  

S t a c k  , o n e m i g h t w r i t e :  

s t r u c t S t a c k * s = ( s t r u c t S t a c k * ) m a l l o c ( s i z e o f ( s t r u c t S t a c k ) ) ;  

I n i t S t a c k ( s , 1 7 ) ;  

T h e  I n i t S t a c k ( )   f u n c t i o n m i g h t t a k e t h e s e c o n d a r g u m e n t a s t h e s i z e o f t h e s t a c k t o  

c r e a t e , a n d u s e   m a l l o c ( )   a g a i n t o g e t a n a r r a y o f 1 7 i n t e g e r s .  

T h e w a y t h i s i s d o n e i n C + + i s a s f o l l o w s :  

S t a c k * s = n e w S t a c k ( 1 7 ) ;  

T h e  n e w  f u n c t i o n t a k e s t h e p l a c e o f   m a l l o c ( )  . T o s p e c i f y h o w t h e o b j e c t s h o u l d b e  

i n i t i a l i z e d , o n e d e c l a r e s a   c o n s t r u c t o r   f u n c t i o n a s a m e m b e r o f t h e c l a s s , w i t h t h e n a m e  

o f t h e f u n c t i o n b e i n g t h e s a m e a s t h e c l a s s n a m e :  

Page 8: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 8/29

c l a s s S t a c k {  

p u b l i c :  

S t a c k ( i n t s z ) ; / / C o n s t r u c t o r : i n i t i a l i z e v a r i a b l e s , a l l o c a t e s p a c e .  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .

p r i v a t e :  

i n t s i z e ; / / T h e m a x i m u m c a p a c i t y o f t h e s t a c k .  

i n t t o p ; / / I n d e x o f t h e l o w e s t u n u s e d p o s i t i o n .  

i n t * s t a c k ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

S t a c k : : S t a c k ( i n t s z ) {  

s i z e = s z ;  

t o p = 0 ;  

s t a c k = n e w i n t s i z e ] ; / / L e t ' s g e t a n a r r a y o f i n t e g e r s .  

T h e r e a r e a f e w t h i n g s g o i n g o n h e r e , s o w e w i l l d e s c r i b e t h e m o n e a t a t i m e .  

T h e  n e w  o p e r a t o r a u t o m a t i c a l l y c r e a t e s ( i . e . a l l o c a t e s ) t h e o b j e c t a n d t h e n c a l l s t h e  

c o n s t r u c t o r f u n c t i o n f o r t h e n e w o b j e c t . T h i s s a m e s e q u e n c e h a p p e n s e v e n i f , f o r  

i n s t a n c e , y o u d e c l a r e a n o b j e c t a s a n a u t o m a t i c v a r i a b l e i n s i d e a f u n c t i o n o r b l o c k  

{ t h e c o m p i l e r a l l o c a t e s s p a c e f o r t h e o b j e c t o n t h e s t a c k , a n d c a l l s t h e c o n s t r u c t o r  

f u n c t i o n o n i t .  

I n t h i s e x a m p l e , w e c r e a t e t w o s t a c k s o f d i e r e n t s i z e s , o n e b y d e c l a r i n g i t a s a n  

a u t o m a t i c v a r i a b l e , a n d o n e b y u s i n g   n e w  . 

v o i d  

t e s t ( ) {  

S t a c k s 1 ( 1 7 ) ;  

S t a c k * s 2 = n e w S t a c k ( 2 3 ) ;  

N o t e t h e r e a r e t w o w a y s o f p r o v i d i n g a r g u m e n t s t o c o n s t r u c t o r s : w i t h   n e w  , y o u p u t  

t h e a r g u m e n t l i s t a f t e r t h e c l a s s n a m e , a n d w i t h a u t o m a t i c o r g l o b a l v a r i a b l e s , y o u p u t  

t h e m a f t e r t h e v a r i a b l e n a m e .  

I t i s c r u c i a l t h a t y o u   a l w a y s   d e n e a c o n s t r u c t o r f o r e v e r y c l a s s y o u d e n e , a n d t h a t  

t h e c o n s t r u c t o r i n i t i a l i z e   e v e r y   d a t a m e m b e r o f t h e c l a s s . I f y o u d o n ' t d e n e y o u r  

o w n c o n s t r u c t o r , t h e c o m p i l e r w i l l a u t o m a t i c a l l y d e n e o n e f o r y o u , a n d b e l i e v e m e ,  

i t w o n ' t d o w h a t y o u w a n t ( \ t h e u n h e l p f u l c o m p i l e r " ) . T h e d a t a m e m b e r s w i l l b e  

i n i t i a l i z e d t o r a n d o m , u n r e p e a t a b l e v a l u e s , a n d w h i l e y o u r p r o g r a m m a y w o r k a n y w a y ,  

i t m i g h t n o t t h e n e x t t i m e y o u r e c o m p i l e ( o r v i c e v e r s a ! ) .  

Page 9: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 9/29

A s w i t h n o r m a l C v a r i a b l e s , v a r i a b l e s d e c l a r e d i n s i d e a f u n c t i o n a r e d e a l l o c a t e d a u t o -  

m a t i c a l l y w h e n t h e f u n c t i o n r e t u r n s ; f o r e x a m p l e , t h e   s 1  o b j e c t i s d e a l l o c a t e d w h e n  

t e s t   r e t u r n s . D a t a a l l o c a t e d w i t h   n e w  ( s u c h a s   s 2  ) i s s t o r e d o n t h e h e a p , h o w e v e r ,  

a n d r e m a i n s a f t e r t h e f u n c t i o n r e t u r n s ; h e a p d a t a m u s t b e e x p l i c i t l y d i s p o s e d o f u s i n g  

d e l e t e  , d e s c r i b e d b e l o w .  

T h e  n e w  o p e r a t o r c a n a l s o b e u s e d t o a l l o c a t e a r r a y s , i l l u s t r a t e d a b o v e i n a l l o c a t i n g  

a n a r r a y o f   i n t s  , o f d i m e n s i o n   s i z e  : 

s t a c k = n e w i n t s i z e ] ;  

N o t e t h a t y o u c a n u s e   n e w  a n d  d e l e t e   ( d e s c r i b e d b e l o w ) w i t h b u i l t - i n t y p e s l i k e   i n t 

a n d  c h a r   a s w e l l a s w i t h c l a s s o b j e c t s l i k e   S t a c k   . 

4 .  D e s t r u c t o r s a n d t h e o p e r a t o r d e l e t e .   J u s t a s   n e w  i s t h e r e p l a c e m e n t f o r   m a l l o c ( )   , 

t h e r e p l a c e m e n t f o r   f r e e ( )   i s  d e l e t e   . T o g e t r i d o f t h e   S t a c k   o b j e c t w e a l l o c a t e d a b o v e  

w i t h   n e w  , o n e c a n d o :  

d e l e t e s 2 ;  

T h i s w i l l d e a l l o c a t e t h e o b j e c t , b u t r s t i t w i l l c a l l t h e   d e s t r u c t o r   f o r t h e   S t a c k   c l a s s ,  

i f t h e r e i s o n e . T h i s d e s t r u c t o r i s a m e m b e r f u n c t i o n o f   S t a c k   c a l l e d   ~ S t a c k ( )   : 

c l a s s S t a c k {  

p u b l i c :  

S t a c k ( i n t s z ) ; / / C o n s t r u c t o r : i n i t i a l i z e v a r i a b l e s , a l l o c a t e s p a c e .  

~ S t a c k ( ) ; / / D e s t r u c t o r : d e a l l o c a t e s p a c e a l l o c a t e d a b o v e .  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .  

p r i v a t e :  

i n t s i z e ; / / T h e m a x i m u m c a p a c i t y o f t h e s t a c k .  

i n t t o p ; / / I n d e x o f t h e l o w e s t u n u s e d p o s i t i o n .  

i n t * s t a c k ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

S t a c k : : ~ S t a c k ( ) {  

d e l e t e ] s t a c k ; / / d e l e t e a n a r r a y o f i n t e g e r s  

T h e d e s t r u c t o r h a s t h e j o b o f d e a l l o c a t i n g t h e d a t a t h e c o n s t r u c t o r a l l o c a t e d . M a n y  

c l a s s e s w o n ' t n e e d d e s t r u c t o r s , a n d s o m e w i l l u s e t h e m t o c l o s e l e s a n d o t h e r w i s e  

c l e a n u p a f t e r t h e m s e l v e s .  

Page 10: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 10/29

T h e d e s t r u c t o r f o r a n o b j e c t i s c a l l e d w h e n t h e o b j e c t i s d e a l l o c a t e d . I f t h e o b j e c t  

w a s c r e a t e d w i t h   n e w  , t h e n y o u m u s t c a l l   d e l e t e   o n t h e o b j e c t , o r e l s e t h e o b j e c t w i l l  

c o n t i n u e t o o c c u p y s p a c e u n t i l t h e p r o g r a m i s o v e r { t h i s i s c a l l e d \ a m e m o r y l e a k . "  

M e m o r y l e a k s a r e b a d t h i n g s { a l t h o u g h v i r t u a l m e m o r y i s s u p p o s e d t o b e u n l i m i t e d ,  

y o u c a n i n f a c t r u n o u t o f i t { a n d s o y o u s h o u l d b e c a r e f u l t o   a l w a y s   d e l e t e w h a t  

y o u a l l o c a t e . O f c o u r s e , i t i s e v e n w o r s e t o c a l l   d e l e t e   t o o e a r l y {   d e l e t e   c a l l s t h e  

d e s t r u c t o r a n d p u t s t h e s p a c e b a c k o n t h e h e a p f o r l a t e r r e - u s e . I f y o u a r e s t i l l u s i n g  

t h e o b j e c t , y o u w i l l g e t r a n d o m a n d n o n - r e p e a t a b l e r e s u l t s t h a t w i l l b e v e r y d i c u l t  

t o d e b u g . I n m y e x p e r i e n c e , u s i n g d a t a t h a t h a s a l r e a d y b e e n d e l e t e d i s m a j o r s o u r c e  

o f h a r d - t o - l o c a t e b u g s i n s t u d e n t ( a n d p r o f e s s i o n a l ) p r o g r a m s , s o h e y , b e c a r e f u l o u t  

t h e r e !  

I f t h e o b j e c t i s a n a u t o m a t i c , a l l o c a t e d o n t h e e x e c u t i o n s t a c k o f a f u n c t i o n , t h e  

d e s t r u c t o r w i l l b e c a l l e d a n d t h e s p a c e d e a l l o c a t e d w h e n t h e f u n c t i o n r e t u r n s ; i n t h e  

t e s t ( )   e x a m p l e a b o v e ,   s 1  w i l l b e d e a l l o c a t e d w h e n   t e s t ( )   r e t u r n s , w i t h o u t y o u h a v i n g  

t o d o a n y t h i n g .  

I n N a c h o s , w e a l w a y s e x p l i c i t l y a l l o c a t e a n d d e a l l o c a t e o b j e c t s w i t h   n e w  a n d  d e l e t e  , 

t o m a k e i t c l e a r w h e n t h e c o n s t r u c t o r a n d d e s t r u c t o r i s b e i n g c a l l e d . F o r e x a m p l e ,  

i f a n o b j e c t c o n t a i n s a n o t h e r o b j e c t a s a m e m b e r v a r i a b l e , w e u s e   n e w  t o e x p l i c i t l y  

a l l o c a t e d a n d i n i t i a l i z e t h e m e m b e r v a r i a b l e , i n s t e a d o f i m p l i c i t l y a l l o c a t i n g i t a s p a r t  

o f t h e c o n t a i n i n g o b j e c t . C + + h a s s t r a n g e , n o n - i n t u i t i v e r u l e s f o r t h e o r d e r i n w h i c h  

t h e c o n s t r u c t o r s a n d d e s t r u c t o r s a r e c a l l e d w h e n y o u i m p l i c i t l y a l l o c a t e a n d d e a l l o c a t e  

o b j e c t s . I n p r a c t i c e , a l t h o u g h s i m p l e r , e x p l i c i t a l l o c a t i o n i s s l i g h t l y s l o w e r a n d i t m a k e s  

i t m o r e l i k e l y t h a t y o u w i l l f o r g e t t o d e a l l o c a t e a n o b j e c t ( a b a d t h i n g ! ) , a n d s o s o m e  

w o u l d d i s a g r e e w i t h t h i s a p p r o a c h .  

W h e n y o u d e a l l o c a t e a n a r r a y , y o u h a v e t o t e l l t h e c o m p i l e r t h a t y o u a r e d e a l l o c a t i n g  

a n a r r a y , a s o p p o s e d t o a s i n g l e e l e m e n t i n t h e a r r a y . H e n c e t o d e l e t e t h e a r r a y o f  

i n t e g e r s i n   S t a c k : : ~ S t a c k   : 

d e l e t e ] s t a c k ;  

3 . 2 O t h e r B a s i c C + + F e a t u r e s  

H e r e a r e a f e w o t h e r C + + f e a t u r e s t h a t a r e u s e f u l t o k n o w .  

1 . W h e n y o u d e n e a   c l a s s S t a c k  , t h e n a m e   S t a c k   b e c o m e s u s a b l e a s a t y p e n a m e a s  

i f c r e a t e d w i t h   t y p e d e f   . T h e s a m e i s t r u e f o r   e n u m  s . 

2 . Y o u c a n d e n e f u n c t i o n s i n s i d e o f a   c l a s s   d e n i t i o n , w h e r e u p o n t h e y b e c o m e   i n l i n e  

 f u n c t i o n s   , w h i c h a r e e x p a n d e d i n t h e b o d y o f t h e f u n c t i o n w h e r e t h e y a r e u s e d . T h e  

r u l e o f t h u m b t o f o l l o w i s t o o n l y c o n s i d e r i n l i n i n g o n e - l i n e f u n c t i o n s , a n d e v e n t h e n  

d o s o r a r e l y .  

A s a n e x a m p l e , w e c o u l d m a k e t h e   F u l l   r o u t i n e a n i n l i n e .  

1 0 

Page 11: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 11/29

c l a s s S t a c k {  

. . . 

b o o l F u l l ( ) { r e t u r n ( t o p = = s i z e ) ; } ;  

. . . 

} ; 

T h e r e a r e t w o m o t i v a t i o n s f o r i n l i n e s : c o n v e n i e n c e a n d p e r f o r m a n c e . I f o v e r u s e d ,  

i n l i n e s c a n m a k e y o u r c o d e m o r e c o n f u s i n g , b e c a u s e t h e i m p l e m e n t a t i o n f o r a n o b j e c t  

i s n o l o n g e r i n o n e p l a c e , b u t s p r e a d b e t w e e n t h e   . h  a n d  . c  l e s . I n l i n e s c a n s o m e t i m e s  

s p e e d u p y o u r c o d e ( b y a v o i d i n g t h e o v e r h e a d o f a p r o c e d u r e c a l l ) , b u t t h a t s h o u l d n ' t  

b e y o u r p r i n c i p a l c o n c e r n a s a s t u d e n t ( r a t h e r , a t l e a s t t o b e g i n w i t h , y o u s h o u l d b e  

m o s t c o n c e r n e d w i t h w r i t i n g c o d e t h a t i s s i m p l e a n d b u g f r e e ) . N o t t o m e n t i o n t h a t  

i n l i n i n g s o m e t i m e s s l o w s d o w n a p r o g r a m , s i n c e t h e o b j e c t c o d e f o r t h e f u n c t i o n i s  

d u p l i c a t e d w h e r e v e r t h e f u n c t i o n i s c a l l e d , p o t e n t i a l l y h u r t i n g c a c h e p e r f o r m a n c e .  

3 . I n s i d e a f u n c t i o n b o d y , y o u c a n d e c l a r e s o m e v a r i a b l e s , e x e c u t e s o m e s t a t e m e n t s , a n d  

t h e n d e c l a r e m o r e v a r i a b l e s . T h i s c a n m a k e c o d e a l o t m o r e r e a d a b l e . I n f a c t , y o u c a n  

e v e n w r i t e t h i n g s l i k e :  

f o r ( i n t i = 0 ; i < 1 0 ; i + + ) ;  

D e p e n d i n g o n y o u r c o m p i l e r , h o w e v e r , t h e v a r i a b l e   i  m a y s t i l l v i s i b l e a f t e r t h e e n d o f  

t h e  f o r  l o o p , h o w e v e r , w h i c h i s n o t w h a t o n e m i g h t e x p e c t o r d e s i r e .  

4 . C o m m e n t s c a n b e g i n w i t h t h e c h a r a c t e r s   / /  a n d e x t e n d t o t h e e n d o f t h e l i n e . T h e s e  

a r e u s u a l l y m o r e h a n d y t h a n t h e   / * * /   s t y l e o f c o m m e n t s .  

5 . C + + p r o v i d e s s o m e n e w o p p o r t u n i t i e s t o u s e t h e   c o n s t   k e y w o r d f r o m A N S I C . T h e  

b a s i c i d e a o f   c o n s t   i s t o p r o v i d e e x t r a i n f o r m a t i o n t o t h e c o m p i l e r a b o u t h o w a v a r i a b l e  

o r f u n c t i o n i s u s e d , t o a l l o w i t t o a g a n e r r o r i f i t i s b e i n g u s e d i m p r o p e r l y . Y o u s h o u l d  

a l w a y s l o o k f o r w a y s t o g e t t h e c o m p i l e r t o c a t c h b u g s f o r y o u . A f t e r a l l , w h i c h t a k e s  

l e s s t i m e ? F i x i n g a c o m p i l e r - a g g e d e r r o r , o r c h a s i n g d o w n t h e s a m e b u g u s i n g g d b ?  

F o r e x a m p l e , y o u c a n d e c l a r e t h a t a m e m b e r f u n c t i o n o n l y r e a d s t h e m e m b e r d a t a ,  

a n d n e v e r m o d i e s t h e o b j e c t :  

c l a s s S t a c k {  

. . . 

b o o l F u l l ( ) c o n s t ; / / F u l l ( ) n e v e r m o d i f i e s m e m b e r d a t a  

. . . 

} ; 

A s i n C , y o u c a n u s e   c o n s t   t o d e c l a r e t h a t a v a r i a b l e i s n e v e r m o d i e d :  

1 1 

Page 12: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 12/29

c o n s t i n t I n i t i a l H a s h T a b l e S i z e = 8 ;  

T h i s i s   m u c h   b e t t e r t h a n u s i n g   # d e f i n e   f o r c o n s t a n t s , s i n c e t h e a b o v e i s t y p e - c h e c k e d .  

6 . I n p u t / o u t p u t i n C + + c a n b e d o n e w i t h t h e   > >  a n d  < <  o p e r a t o r s a n d t h e o b j e c t s   c i n 

a n d  c o u t  . F o r e x a m p l e , t o w r i t e t o   s t d o u t   : 

c o u t < < " H e l l o w o r l d ! T h i s i s s e c t i o n " < < 3 < < " ! " ;  

T h i s i s e q u i v a l e n t t o t h e n o r m a l C c o d e  

f p r i n t f ( s t d o u t , " H e l l o w o r l d ! T h i s i s s e c t i o n % d ! \ n " , 3 ) ;  

e x c e p t t h a t t h e C + + v e r s i o n i s t y p e - s a f e ; w i t h   p r i n t f   , t h e c o m p i l e r w o n ' t c o m p l a i n i f  

y o u t r y t o p r i n t a o a t i n g p o i n t n u m b e r a s a n i n t e g e r . I n f a c t , y o u c a n u s e t r a d i t i o n a l  

p r i n t f   i n a C + + p r o g r a m , b u t y o u w i l l g e t b i z a r r e b e h a v i o r i f y o u t r y t o u s e b o t h  

p r i n t f   a n d  < <  o n t h e s a m e s t r e a m . R e a d i n g f r o m   s t d i n   w o r k s t h e s a m e w a y a s w r i t i n g  

t o  s t d o u t  , e x c e p t u s i n g t h e s h i f t r i g h t o p e r a t o r i n s t e a d o f s h i f t l e f t . I n o r d e r t o r e a d  

t w o i n t e g e r s f r o m   s t d i n   : 

i n t f i e l d 1 , f i e l d 2 ;  

c i n > > f i e l d 1 > > f i e l d 2 ;  

/ / e q u i v a l e n t t o f s c a n f ( s t d i n , " % d % d " , & f i e l d 1 , & f i e l d 2 ) ;  

/ / n o t e t h a t f i e l d 1 a n d f i e l d 2 a r e i m p l i c i t l y m o d i f i e d  

I n f a c t ,   c i n  a n d  c o u t   a r e i m p l e m e n t e d a s n o r m a l C + + o b j e c t s , u s i n g o p e r a t o r o v e r -  

l o a d i n g a n d r e f e r e n c e p a r a m e t e r s , b u t ( f o r t u n a t e l y ! ) y o u d o n ' t n e e d t o u n d e r s t a n d  

e i t h e r o f t h o s e t o b e a b l e t o d o I / O i n C + + .  

4 A d v a n c e d C o n c e p t s i n C + + : D a n g e r o u s b u t O c c a -    

s i o n a l l y U s e f u l    

T h e r e a r e a f e w C + + f e a t u r e s , n a m e l y ( s i n g l e ) i n h e r i t a n c e a n d t e m p l a t e s , w h i c h a r e e a s i l y  

a b u s e d , b u t c a n d r a m a t i c a l l y s i m p l i f y a n i m p l e m e n t a t i o n i f u s e d p r o p e r l y . I d e s c r i b e t h e  

b a s i c i d e a b e h i n d t h e s e \ d a n g e r o u s b u t u s e f u l " f e a t u r e s h e r e , i n c a s e y o u r u n a c r o s s t h e m .  

F e e l f r e e t o s k i p t h i s s e c t i o n { i t ' s l o n g , c o m p l e x , a n d y o u c a n u n d e r s t a n d 9 9 % o f t h e c o d e  

i n N a c h o s w i t h o u t r e a d i n g t h i s s e c t i o n .  

U p t o t h i s p o i n t , t h e r e r e a l l y h a s n ' t b e e n a n y f u n d a m e n t a l d i e r e n c e b e t w e e n p r o g r a m -  

m i n g i n C a n d i n C + + . I n f a c t , m o s t e x p e r i e n c e d C p r o g r a m m e r s o r g a n i z e t h e i r f u n c -  

t i o n s i n t o m o d u l e s t h a t r e l a t e t o a s i n g l e d a t a s t r u c t u r e ( a " c l a s s " ) , a n d o f t e n e v e n u s e  

1 2 

Page 13: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 13/29

a n a m i n g c o n v e n t i o n w h i c h m i m i c s C + + , f o r e x a m p l e , n a m i n g r o u t i n e s   S t a c k F u l l ( )   a n d 

S t a c k P u s h ( )   . H o w e v e r , t h e f e a t u r e s I ' m a b o u t t o d e s c r i b e   d o  r e q u i r e a p a r a d i g m s h i f t {  

t h e r e i s n o s i m p l e t r a n s l a t i o n f r o m t h e m i n t o a n o r m a l C p r o g r a m . T h e b e n e t w i l l b e t h a t ,  

i n s o m e c i r c u m s t a n c e s , y o u w i l l b e a b l e t o w r i t e g e n e r i c c o d e t h a t w o r k s w i t h m u l t i p l e k i n d s  

o f o b j e c t s .  

N e v e r t h e l e s s , I w o u l d a d v i s e a b e g i n n i n g C + + p r o g r a m m e r a g a i n s t t r y i n g t o u s e t h e s e  

f e a t u r e s , b e c a u s e y o u w i l l a l m o s t c e r t a i n l y m i s u s e t h e m . I t ' s p o s s i b l e ( e v e n e a s y ! ) t o w r i t e  

c o m p l e t e l y i n s c r u t a b l e c o d e u s i n g i n h e r i t a n c e a n d / o r t e m p l a t e s . A l t h o u g h y o u m i g h t n d i t  

a m u s i n g t o w r i t e c o d e t h a t i s i m p o s s i b l e f o r y o u r g r a d e r s t o u n d e r s t a n d , I a s s u r e y o u t h e y  

w o n ' t n d i t a m u s i n g a t a l l , a n d w i l l r e t u r n t h e f a v o r w h e n t h e y a s s i g n g r a d e s . I n i n d u s t r y ,  

a h i g h p r e m i u m i s p l a c e d o n k e e p i n g c o d e s i m p l e a n d r e a d a b l e . I t ' s e a s y t o w r i t e n e w c o d e ,  

b u t t h e r e a l c o s t c o m e s w h e n y o u t r y t o k e e p i t w o r k i n g , e v e n a s y o u a d d n e w f e a t u r e s t o i t .  

N a c h o s c o n t a i n s a f e w e x a m p l e s o f t h e c o r r e c t u s e o f i n h e r i t a n c e a n d t e m p l a t e s , b u t  

r e a l i z e t h a t N a c h o s d o e s   n o t  u s e t h e m e v e r y w h e r e . I n f a c t , i f y o u g e t c o n f u s e d b y t h i s  

s e c t i o n , d o n ' t w o r r y , y o u d o n ' t n e e d t o u s e a n y o f t h e s e f e a t u r e s i n o r d e r t o d o t h e N a c h o s  

a s s i g n m e n t s . I o m i t a w h o l e b u n c h o f d e t a i l s ; i f y o u n d y o u r s e l f m a k i n g w i d e s p r e a d u s e  

o f i n h e r i t a n c e o r t e m p l a t e s , y o u s h o u l d c o n s u l t a C + + r e f e r e n c e m a n u a l f o r t h e r e a l s c o o p .  

T h i s i s m e a n t t o b e j u s t e n o u g h t o g e t y o u s t a r t e d , a n d t o h e l p y o u i d e n t i f y w h e n i t w o u l d  

b e a p p r o p r i a t e t o u s e t h e s e f e a t u r e s a n d t h u s l e a r n m o r e a b o u t t h e m !  

4 . 1 I n h e r i t a n c e  

I n h e r i t a n c e c a p t u r e s t h e i d e a t h a t c e r t a i n c l a s s e s o f o b j e c t s a r e r e l a t e d t o e a c h o t h e r i n u s e f u l  

w a y s . F o r e x a m p l e , l i s t s a n d s o r t e d l i s t s h a v e q u i t e s i m i l a r b e h a v i o r { t h e y b o t h a l l o w t h e  

u s e r t o i n s e r t , d e l e t e , a n d n d e l e m e n t s t h a t a r e o n t h e l i s t . T h e r e a r e t w o b e n e t s t o u s i n g  

i n h e r i t a n c e :  

1 . Y o u c a n w r i t e g e n e r i c c o d e t h a t d o e s n ' t c a r e e x a c t l y w h i c h k i n d o f o b j e c t i t i s m a n i p -  

u l a t i n g . F o r e x a m p l e , i n h e r i t a n c e i s w i d e l y u s e d i n w i n d o w i n g s y s t e m s . E v e r y t h i n g o n  

t h e s c r e e n ( w i n d o w s , s c r o l l b a r s , t i t l e s , i c o n s ) i s i t s o w n o b j e c t , b u t t h e y a l l s h a r e a s e t  

o f m e m b e r f u n c t i o n s i n c o m m o n , s u c h a s a r o u t i n e   R e p a i n t   t o r e d r a w t h e o b j e c t o n t o  

t h e s c r e e n . T h i s w a y , t h e c o d e t o r e p a i n t t h e e n t i r e s c r e e n c a n s i m p l y c a l l t h e   R e p a i n t  

f u n c t i o n o n e v e r y o b j e c t o n t h e s c r e e n . T h e c o d e t h a t c a l l s   R e p a i n t   d o e s n ' t n e e d t o  

k n o w w h i c h k i n d s o f o b j e c t s a r e o n t h e s c r e e n , a s l o n g a s e a c h i m p l e m e n t s   R e p a i n t   . 

2 . Y o u c a n s h a r e p i e c e s o f a n i m p l e m e n t a t i o n b e t w e e n t w o o b j e c t s . F o r e x a m p l e , i f  

y o u w e r e t o i m p l e m e n t b o t h l i s t s a n d s o r t e d l i s t s i n C , y o u ' d p r o b a b l y n d y o u r s e l f  

r e p e a t i n g c o d e i n b o t h p l a c e s { i n f a c t , y o u m i g h t b e r e a l l y t e m p t e d t o o n l y i m p l e m e n t  

s o r t e d l i s t s , s o t h a t y o u o n l y h a d t o d e b u g o n e v e r s i o n . I n h e r i t a n c e p r o v i d e s a w a y  

t o r e - u s e c o d e b e t w e e n n e a r l y s i m i l a r c l a s s e s . F o r e x a m p l e , g i v e n a n i m p l e m e n t a t i o n  

o f a l i s t c l a s s , i n C + + y o u c a n i m p l e m e n t s o r t e d l i s t s b y r e p l a c i n g t h e i n s e r t m e m b e r  

f u n c t i o n { t h e o t h e r f u n c t i o n s , d e l e t e , i s F u l l , p r i n t , a l l r e m a i n t h e s a m e .  

1 3 

Page 14: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 14/29

4 . 1 . 1 S h a r e d B e h a v i o r  

L e t m e u s e o u r S t a c k e x a m p l e t o i l l u s t r a t e t h e r s t o f t h e s e . O u r S t a c k i m p l e m e n t a t i o n a b o v e  

c o u l d h a v e b e e n i m p l e m e n t e d w i t h l i n k e d l i s t s , i n s t e a d o f a n a r r a y . A n y c o d e u s i n g a S t a c k  

s h o u l d n ' t c a r e w h i c h i m p l e m e n t a t i o n i s b e i n g u s e d , e x c e p t t h a t t h e l i n k e d l i s t i m p l e m e n t a t i o n  

c a n ' t o v e r o w . ( I n f a c t , w e c o u l d a l s o c h a n g e t h e a r r a y i m p l e m e n t a t i o n t o h a n d l e o v e r o w  

b y a u t o m a t i c a l l y r e s i z i n g t h e a r r a y a s i t e m s a r e p u s h e d o n t h e s t a c k . )  

T o a l l o w t h e t w o i m p l e m e n t a t i o n s t o c o e x i s t , w e r s t d e n e a n   a b s t r a c t   S t a c k , c o n t a i n i n g  

 j u s t t h e p u b l i c m e m b e r f u n c t i o n s , b u t n o d a t a .  

c l a s s S t a c k {  

p u b l i c :  

S t a c k ( ) ;  

v i r t u a l ~ S t a c k ( ) ; / / d e a l l o c a t e t h e s t a c k  

v i r t u a l v o i d P u s h ( i n t v a l u e ) = 0 ;  

/ / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

v i r t u a l b o o l F u l l ( ) = 0 ; / / I s t h e s t a c k i s f u l l ?  

} ; 

/ / F o r g + + , n e e d t h e s e e v e n t h o u g h n o d a t a t o i n i t i a l i z e .  

S t a c k : : S t a c k { }  

S t a c k : : ~ S t a c k ( ) { }  

T h e  S t a c k   d e n i t i o n i s c a l l e d a   b a s e c l a s s   o r s o m e t i m e s a   s u p e r c l a s s  . W e c a n t h e n d e n e  

t w o d i e r e n t   d e r i v e d c l a s s e s  , s o m e t i m e s c a l l e d   s u b c l a s s e s   w h i c h i n h e r i t b e h a v i o r f r o m t h e  

b a s e c l a s s . ( O f c o u r s e , i n h e r i t a n c e i s r e c u r s i v e { a d e r i v e d c l a s s c a n i n t u r n b e a b a s e c l a s s  

f o r y e t a n o t h e r d e r i v e d c l a s s , a n d s o o n . ) N o t e t h a t I h a v e p r e p e n d e d t h e f u n c t i o n s i n t h e  

b a s e c l a s s i s p r e p e n d e d w i t h t h e k e y w o r d   v i r t u a l   , t o s i g n i f y t h a t t h e y c a n b e r e d e n e d  

b y e a c h o f t h e t w o d e r i v e d c l a s s e s . T h e v i r t u a l f u n c t i o n s a r e i n i t i a l i z e d t o z e r o , t o t e l l t h e  

c o m p i l e r t h a t t h o s e f u n c t i o n s m u s t b e d e n e d b y t h e d e r i v e d c l a s s e s .  

H e r e ' s h o w w e c o u l d d e c l a r e t h e a r r a y - b a s e d a n d l i s t - b a s e d i m p l e m e n t a t i o n s o f   S t a c k  . 

T h e s y n t a x   : p u b l i c S t a c k   s i g n i e s t h a t b o t h   A r r a y S t a c k   a n d  L i s t S t a c k   a r e k i n d s o f  

S t a c k s   , a n d s h a r e t h e s a m e b e h a v i o r a s t h e b a s e c l a s s .  

c l a s s A r r a y S t a c k : p u b l i c S t a c k { / / t h e s a m e a s i n S e c t i o n 2  

p u b l i c :  

A r r a y S t a c k ( i n t s z ) ; / / C o n s t r u c t o r : i n i t i a l i z e v a r i a b l e s , a l l o c a t e s p a c e .  

~ A r r a y S t a c k ( ) ; / / D e s t r u c t o r : d e a l l o c a t e s p a c e a l l o c a t e d a b o v e .  

v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .  

p r i v a t e :  

i n t s i z e ; / / T h e m a x i m u m c a p a c i t y o f t h e s t a c k .  

i n t t o p ; / / I n d e x o f t h e l o w e s t u n u s e d p o s i t i o n .  

1 4 

Page 15: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 15/29

i n t * s t a c k ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

c l a s s L i s t S t a c k : p u b l i c S t a c k {  

p u b l i c :  

L i s t S t a c k ( ) ;  

~ L i s t S t a c k ( ) ;  

v o i d P u s h ( i n t v a l u e ) ;  

b o o l F u l l ( ) ;  

p r i v a t e :  

L i s t * l i s t ; / / l i s t o f i t e m s p u s h e d o n t h e s t a c k  

} ; 

L i s t S t a c k : : L i s t S t a c k ( ) {  

l i s t = n e w L i s t ;  

L i s t S t a c k : : ~ L i s t S t a c k ( ) {  

d e l e t e l i s t ;  

1 5 

Page 16: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 16/29

v o i d L i s t S t a c k : : P u s h ( i n t v a l u e ) {  

l i s t - > P r e p e n d ( v a l u e ) ;  

b o o l L i s t S t a c k : : F u l l ( ) {  

r e t u r n F A L S E ; / / t h i s s t a c k n e v e r o v e r f l o w s !  

T h e n e a t c o n c e p t h e r e i s t h a t I c a n a s s i g n p o i n t e r s t o i n s t a n c e s o f  L i s t S t a c k   o r  A r r a y S t a c k  

t o a v a r i a b l e o f t y p e   S t a c k   , a n d t h e n u s e t h e m a s i f t h e y w e r e o f t h e b a s e t y p e .  

S t a c k * s 1 = n e w L i s t S t a c k ;  

S t a c k * s 2 = n e w A r r a y S t a c k ( 1 7 ) ;  

i f ( ! s t a c k - > F u l l ( ) )  

s 1 - > P u s h ( 5 ) ;  

i f ( ! s 2 - > F u l l ( ) )  

s 2 - > P u s h ( 6 ) ;  

d e l e t e s 1 ;  

d e l e t e s 2 ;  

T h e c o m p i l e r a u t o m a t i c a l l y i n v o k e s   L i s t S t a c k   o p e r a t i o n s f o r   s 1  , a n d   A r r a y S t a c k   o p - 

e r a t i o n s f o r   s 2  ; t h i s i s d o n e b y c r e a t i n g a p r o c e d u r e t a b l e f o r e a c h o b j e c t , w h e r e d e r i v e d  

o b j e c t s o v e r r i d e t h e d e f a u l t e n t r i e s i n t h e t a b l e d e n e d b y t h e b a s e c l a s s . T o t h e c o d e a b o v e ,  

i t i n v o k e s t h e o p e r a t i o n s   F u l l  ,  P u s h  , a n d   d e l e t e   b y i n d i r e c t i o n t h r o u g h t h e p r o c e d u r e t a b l e ,  

s o t h a t t h e c o d e d o e s n ' t n e e d t o k n o w w h i c h k i n d o f o b j e c t i t i s .  

I n t h i s e x a m p l e , s i n c e I n e v e r c r e a t e a n i n s t a n c e o f t h e a b s t r a c t c l a s s   S t a c k  , I d o n o t n e e d  

t o  i m p l e m e n t   i t s f u n c t i o n s . T h i s m i g h t s e e m a b i t s t r a n g e , b u t r e m e m b e r t h a t t h e d e r i v e d  

c l a s s e s a r e t h e v a r i o u s i m p l e m e n t a t i o n s o f S t a c k , a n d S t a c k s e r v e s o n l y t o r e e c t t h e s h a r e d  

b e h a v i o r b e t w e e n t h e d i e r e n t i m p l e m e n t a t i o n s .  

A l s o n o t e t h a t t h e d e s t r u c t o r f o r   S t a c k   i s a v i r t u a l f u n c t i o n b u t t h e c o n s t r u c t o r i s  

n o t . C l e a r l y , w h e n I c r e a t e a n o b j e c t , I h a v e t o k n o w w h i c h k i n d o f o b j e c t i t i s , w h e t h e r  

A r r a y S t a c k   o r  L i s t S t a c k   . T h e c o m p i l e r m a k e s s u r e t h a t n o o n e c r e a t e s a n i n s t a n c e o f t h e  

a b s t r a c t   S t a c k   b y m i s t a k e { y o u c a n n o t i n s t a n t i a t e a n y c l a s s w h o s e v i r t u a l f u n c t i o n s a r e  

n o t c o m p l e t e l y d e n e d ( i n o t h e r w o r d s , i f a n y o f i t s f u n c t i o n s a r e s e t t o z e r o i n t h e c l a s s  

d e n i t i o n ) .  

B u t w h e n I d e a l l o c a t e a n o b j e c t , I m a y n o l o n g e r k n o w i t s e x a c t t y p e . I n t h e a b o v e c o d e ,  

I w a n t t o c a l l t h e d e s t r u c t o r f o r t h e d e r i v e d o b j e c t , e v e n t h o u g h t h e c o d e o n l y k n o w s t h a t I  

a m d e l e t i n g a n o b j e c t o f c l a s s   S t a c k  . I f t h e d e s t r u c t o r w e r e n o t v i r t u a l , t h e n t h e c o m p i l e r  

w o u l d i n v o k e   S t a c k   ' s d e s t r u c t o r , w h i c h i s n o t a t a l l w h a t I w a n t . T h i s i s a n e a s y m i s t a k e t o  

m a k e ( I m a d e i t i n t h e r s t d r a f t o f t h i s a r t i c l e ! ) { i f y o u d o n ' t d e n e a d e s t r u c t o r f o r t h e  

a b s t r a c t c l a s s , t h e c o m p i l e r w i l l d e n e o n e f o r y o u i m p l i c i t l y ( a n d b y t h e w a y , i t w o n ' t b e  

1 6 

Page 17: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 17/29

v i r t u a l , s i n c e y o u h a v e a   r e a l l y   u n h e l p f u l c o m p i l e r ) . T h e r e s u l t f o r t h e a b o v e c o d e w o u l d b e  

a m e m o r y l e a k , a n d w h o k n o w s h o w y o u w o u l d g u r e t h a t o u t !  

4 . 1 . 2 S h a r e d I m p l e m e n t a t i o n  

W h a t a b o u t s h a r i n g c o d e , t h e o t h e r r e a s o n f o r i n h e r i t a n c e ? I n C + + , i t i s p o s s i b l e t o u s e  

m e m b e r f u n c t i o n s o f a b a s e c l a s s i n i t s d e r i v e d c l a s s . ( Y o u c a n a l s o s h a r e d a t a b e t w e e n a  

b a s e c l a s s a n d d e r i v e d c l a s s e s , b u t t h i s i s a b a d i d e a f o r r e a s o n s I ' l l d i s c u s s l a t e r . )  

S u p p o s e t h a t I w a n t e d t o a d d a n e w m e m b e r f u n c t i o n ,  N u m b e r P u s h e d ( )   , t o b o t h i m p l e -  

m e n t a t i o n s o f   S t a c k   . T h e   A r r a y S t a c k   c l a s s a l r e a d y k e e p s c o u n t o f t h e n u m b e r o f i t e m s o n  

t h e s t a c k , s o I c o u l d d u p l i c a t e t h a t c o d e i n   L i s t S t a c k   . I d e a l l y , I ' d l i k e t o b e a b l e t o u s e t h e  

s a m e c o d e i n b o t h p l a c e s . W i t h i n h e r i t a n c e , w e c a n m o v e t h e c o u n t e r i n t o t h e   S t a c k   c l a s s ,  

a n d t h e n i n v o k e t h e b a s e c l a s s o p e r a t i o n s f r o m t h e d e r i v e d c l a s s t o u p d a t e t h e c o u n t e r .  

c l a s s S t a c k {  

p u b l i c :  

v i r t u a l ~ S t a c k ( ) ; / / d e a l l o c a t e d a t a  

v i r t u a l v o i d P u s h ( i n t v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

v i r t u a l b o o l F u l l ( ) = 0 ; / / r e t u r n T R U E i f f u l l  

i n t N u m P u s h e d ( ) ; / / h o w m a n y a r e c u r r e n t l y o n t h e s t a c k ?  

p r o t e c t e d :  

S t a c k ( ) ; / / i n i t i a l i z e d a t a  

p r i v a t e :  

i n t n u m P u s h e d ;  

} ; 

S t a c k : : S t a c k ( ) {  

n u m P u s h e d = 0 ;  

v o i d S t a c k : : P u s h ( i n t v a l u e ) {  

n u m P u s h e d + + ;  

i n t S t a c k : : N u m P u s h e d ( ) {  

r e t u r n n u m P u s h e d ;  

W e c a n t h e n m o d i f y b o t h   A r r a y S t a c k   a n d  L i s t S t a c k   t o m a k e u s e t h e n e w b e h a v i o r o f  

S t a c k   . I ' l l o n l y l i s t o n e o f t h e m h e r e :  

c l a s s A r r a y S t a c k : p u b l i c S t a c k {  

p u b l i c :  

1 7 

Page 18: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 18/29

A r r a y S t a c k ( i n t s z ) ;  

~ A r r a y S t a c k ( ) ;  

v o i d P u s h ( i n t v a l u e ) ;  

b o o l F u l l ( ) ;  

p r i v a t e :  

i n t s i z e ; / / T h e m a x i m u m c a p a c i t y o f t h e s t a c k .  

i n t * s t a c k ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

A r r a y S t a c k : : A r r a y S t a c k ( i n t s z ) : S t a c k ( ) {  

s i z e = s z ;  

s t a c k = n e w i n t s i z e ] ; / / L e t ' s g e t a n a r r a y o f i n t e g e r s .  

v o i d  

A r r a y S t a c k : : P u s h ( i n t v a l u e ) {  

A S S E R T ( ! F u l l ( ) ) ;  

s t a c k N u m P u s h e d ( ) ] = v a l u e ;  

S t a c k : : P u s h ( ) ; / / i n v o k e b a s e c l a s s t o i n c r e m e n t n u m P u s h e d  

T h e r e a r e a f e w t h i n g s t o n o t e :  

1 . T h e c o n s t r u c t o r f o r   A r r a y S t a c k   n e e d s t o i n v o k e t h e c o n s t r u c t o r f o r   S t a c k  , i n o r d e r  

t o i n i t i a l i z e   n u m P u s h e d   . I t d o e s t h a t b y a d d i n g   : S t a c k ( )   t o t h e r s t l i n e i n t h e  

c o n s t r u c t o r :  

A r r a y S t a c k : : A r r a y S t a c k ( i n t s z ) : S t a c k ( )  

T h e s a m e t h i n g a p p l i e s t o d e s t r u c t o r s . T h e r e a r e s p e c i a l r u l e s f o r w h i c h g e t c a l l e d r s t  

{ t h e c o n s t r u c t o r / d e s t r u c t o r f o r t h e b a s e c l a s s o r t h e c o n s t r u c t o r / d e s t r u c t o r f o r t h e  

d e r i v e d c l a s s . A l l I s h o u l d s a y i s , i t ' s a b a d i d e a t o r e l y o n w h a t e v e r t h e r u l e i s { m o r e  

g e n e r a l l y , i t i s a b a d i d e a t o w r i t e c o d e w h i c h r e q u i r e s t h e r e a d e r t o c o n s u l t a m a n u a l  

t o t e l l w h e t h e r o r n o t t h e c o d e w o r k s !  

2 . I i n t r o d u c e d a n e w k e y w o r d ,   p r o t e c t e d   , i n t h e n e w d e n i t i o n o f   S t a c k  . F o r a b a s e  

c l a s s ,   p r o t e c t e d   s i g n i e s t h a t t h o s e m e m b e r d a t a a n d f u n c t i o n s a r e a c c e s s i b l e t o  

c l a s s e s d e r i v e d ( r e c u r s i v e l y ) f r o m t h i s c l a s s , b u t i n a c c e s s i b l e t o o t h e r c l a s s e s . I n o t h e r  

w o r d s , p r o t e c t e d d a t a i s   p u b l i c   t o d e r i v e d c l a s s e s , a n d   p r i v a t e   t o e v e r y o n e e l s e . F o r  

e x a m p l e , w e n e e d   S t a c k   ' s c o n s t r u c t o r t o b e c a l l a b l e b y   A r r a y S t a c k   a n d  L i s t S t a c k   , 

b u t w e d o n ' t w a n t a n y o n e e l s e t o c r e a t e i n s t a n c e s o f   S t a c k  . H e n c e , w e m a k e   S t a c k   ' s 

c o n s t r u c t o r a p r o t e c t e d f u n c t i o n . I n t h i s c a s e , t h i s i s n o t s t r i c t l y n e c e s s a r y s i n c e t h e  

c o m p i l e r w i l l c o m p l a i n i f a n y o n e t r i e s t o c r e a t e a n i n s t a n c e o f   S t a c k   b e c a u s e   S t a c k   s t i l l  

1 8 

Page 19: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 19/29

h a s a n u n d e n e d v i r t u a l f u n c t i o n s ,   P u s h  . B y d e n i n g   S t a c k : : S t a c k   a s  p r o t e c t e d   , 

y o u a r e s a f e e v e n i f s o m e o n e c o m e s a l o n g l a t e r a n d d e n e s   S t a c k : : P u s h   . 

N o t e h o w e v e r t h a t I m a d e   S t a c k   ' s d a t a m e m b e r   p r i v a t e  , n o t   p r o t e c t e d   . A l t h o u g h  

t h e r e i s s o m e d e b a t e o n t h i s p o i n t , a s a r u l e o f t h u m b y o u s h o u l d n e v e r a l l o w o n e  

c l a s s t o s e e d i r e c t l y a c c e s s t h e d a t a i n a n o t h e r , e v e n a m o n g c l a s s e s r e l a t e d b y i n h e r -  

i t a n c e . O t h e r w i s e , i f y o u e v e r c h a n g e t h e i m p l e m e n t a t i o n o f t h e b a s e c l a s s , y o u w i l l  

h a v e t o e x a m i n e a n d c h a n g e a l l t h e i m p l e m e n t a t i o n s o f t h e d e r i v e d c l a s s e s , v i o l a t i n g  

m o d u l a r i t y .  

3 . T h e i n t e r f a c e f o r a d e r i v e d c l a s s a u t o m a t i c a l l y i n c l u d e s a l l f u n c t i o n s d e n e d f o r i t s b a s e  

c l a s s , w i t h o u t h a v i n g t o e x p l i c i t l y l i s t t h e m i n t h e d e r i v e d c l a s s . A l t h o u g h w e d i d n ' t  

d e n e   N u m P u s h e d ( )   i n  A r r a y S t a c k   , w e c a n s t i l l c a l l i t f o r t h o s e o b j e c t s :  

A r r a y S t a c k * s = n e w A r r a y S t a c k ( 1 7 ) ;  

A S S E R T ( s - > N u m P u s h e d ( ) = = 0 ) ; / / s h o u l d b e i n i t i a l i z e d t o 0  

4 . C o n v e r s e l y , e v e n t h o u g h w e h a v e d e n e d a r o u t i n e   S t a c k : : P u s h ( )   , b e c a u s e i t i s  

d e c l a r e d a s   v i r t u a l   , i f w e i n v o k e   P u s h ( )   o n a n   A r r a y S t a c k   o b j e c t , w e w i l l g e t  

A r r a y S t a c k   ' s v e r s i o n o f   P u s h  : 

S t a c k * s = n e w A r r a y S t a c k ( 1 7 ) ;  

i f ( ! s - > F u l l ( ) ) / / A r r a y S t a c k : : F u l l  

s - > P u s h ( 5 ) ; / / A r r a y S t a c k : : P u s h  

5 .  S t a c k : : N u m P u s h e d ( )   i s n o t   v i r t u a l   . T h a t m e a n s t h a t i t c a n n o t b e r e - d e n e d b y  

S t a c k  ' s d e r i v e d c l a s s e s . S o m e p e o p l e b e l i e v e t h a t y o u s h o u l d m a r k   a l l  f u n c t i o n s i n a  

b a s e c l a s s a s   v i r t u a l  ; t h a t w a y , i f y o u l a t e r w a n t t o i m p l e m e n t a d e r i v e d c l a s s t h a t  

r e d e n e s a f u n c t i o n , y o u d o n ' t h a v e t o m o d i f y t h e b a s e c l a s s t o d o s o .  

6 . M e m b e r f u n c t i o n s i n a d e r i v e d c l a s s c a n e x p l i c i t l y i n v o k e p u b l i c o r p r o t e c t e d f u n c t i o n s  

i n t h e b a s e c l a s s , b y t h e f u l l n a m e o f t h e f u n c t i o n ,   B a s e : : F u n c t i o n ( )   , a s i n :  

v o i d A r r a y S t a c k : : P u s h ( i n t v a l u e )  

. . . 

S t a c k : : P u s h ( ) ; / / i n v o k e b a s e c l a s s t o i n c r e m e n t n u m P u s h e d  

O f c o u r s e , i f w e j u s t c a l l e d   P u s h ( )   h e r e ( w i t h o u t p r e p e n d i n g   S t a c k : :   , t h e c o m p i l e r  

w o u l d t h i n k w e w e r e r e f e r r i n g t o   A r r a y S t a c k   ' s  P u s h ( )   , a n d s o t h a t w o u l d r e c u r s e ,  

w h i c h i s n o t e x a c t l y w h a t w e h a d i n m i n d h e r e .  

1 9 

Page 20: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 20/29

Page 21: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 21/29

I n C + + , t h i s i s p r e t t y e a s y t o d o u s i n g t e m p l a t e s :  

t e m p l a t e < c l a s s T >  

c l a s s S t a c k {  

p u b l i c :  

S t a c k ( i n t s z ) ; / / C o n s t r u c t o r : i n i t i a l i z e v a r i a b l e s , a l l o c a t e s p a c e .  

~ S t a c k ( ) ; / / D e s t r u c t o r : d e a l l o c a t e s p a c e a l l o c a t e d a b o v e .  

v o i d P u s h ( T v a l u e ) ; / / P u s h a n i n t e g e r , c h e c k i n g f o r o v e r f l o w .  

b o o l F u l l ( ) ; / / R e t u r n s T R U E i f t h e s t a c k i s f u l l , F A L S E o t h e r w i s e .  

p r i v a t e :  

i n t s i z e ; / / T h e m a x i m u m c a p a c i t y o f t h e s t a c k .  

i n t t o p ; / / I n d e x o f t h e l o w e s t u n u s e d p o s i t i o n .  

T * s t a c k ; / / A p o i n t e r t o a n a r r a y t h a t h o l d s t h e c o n t e n t s .  

} ; 

T o d e n e a t e m p l a t e , w e p r e p e n d t h e k e y w o r d   t e m p l a t e   t o t h e c l a s s d e n i t i o n , a n d w e  

p u t t h e p a r a m e t e r i z e d t y p e f o r t h e t e m p l a t e i n a n g l e b r a c k e t s . I f w e n e e d t o p a r a m e t e r i z e  

t h e i m p l e m e n t a t i o n w i t h t w o o r m o r e t y p e s , i t w o r k s j u s t l i k e a n a r g u m e n t l i s t :   t e m p l a t e  

< c l a s s T , c l a s s S >  . W e c a n u s e t h e t y p e p a r a m e t e r s e l s e w h e r e i n t h e d e n i t i o n , j u s t l i k e  

t h e y w e r e n o r m a l t y p e s .  

W h e n w e p r o v i d e t h e i m p l e m e n t a t i o n f o r e a c h o f t h e m e m b e r f u n c t i o n s i n t h e c l a s s , w e  

a l s o h a v e t o d e c l a r e t h e m a s t e m p l a t e s , a n d a g a i n , o n c e w e d o t h a t , w e c a n u s e t h e t y p e  

p a r a m e t e r s j u s t l i k e n o r m a l t y p e s :  

/ / t e m p l a t e v e r s i o n o f S t a c k : : S t a c k  

t e m p l a t e < c l a s s T >  

S t a c k < T > : : S t a c k ( i n t s z ) {  

s i z e = s z ;  

t o p = 0 ;  

s t a c k = n e w T s i z e ] ; / / L e t ' s g e t a n a r r a y o f t y p e T  

/ / t e m p l a t e v e r s i o n o f S t a c k : : P u s h  

t e m p l a t e < c l a s s T >  

v o i d  

S t a c k < T > : : P u s h ( T v a l u e ) {  

A S S E R T ( ! F u l l ( ) ) ;  

s t a c k t o p + + ] = v a l u e ;  

C r e a t i n g a n o b j e c t o f a t e m p l a t e c l a s s i s s i m i l a r t o c r e a t i n g a n o r m a l o b j e c t :  

v o i d  

2 1 

Page 22: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 22/29

t e s t ( ) {  

S t a c k < i n t > s 1 ( 1 7 ) ;  

S t a c k < c h a r > * s 2 = n e w S t a c k < c h a r > ( 2 3 ) ;  

s 1 . P u s h ( 5 ) ;  

s 2 - > P u s h ( ' z ' ) ;  

d e l e t e s 2 ;  

E v e r y t h i n g o p e r a t e s a s i f w e d e n e d t w o c l a s s e s , o n e c a l l e d   S t a c k < i n t >   { a s t a c k o f  

i n t e g e r s , a n d o n e c a l l e d   S t a c k < c h a r >   { a s t a c k o f c h a r a c t e r s .   s 1  b e h a v e s j u s t l i k e a n i n s t a n c e  

o f t h e r s t ;   s 2  b e h a v e s j u s t l i k e a n i n s t a n c e o f t h e s e c o n d . I n f a c t , t h a t i s e x a c t l y h o w  

t e m p l a t e s a r e t y p i c a l l y i m p l e m e n t e d { y o u g e t a c o m p l e t e   c o p y   o f t h e c o d e f o r t h e t e m p l a t e  

f o r e a c h d i e r e n t i n s t a n t i a t e d t y p e . I n t h e a b o v e e x a m p l e , w e ' d g e t o n e c o p y o f t h e c o d e f o r  

i n t s   a n d o n e c o p y f o r   c h a r s   . 

S o w h a t ' s w r o n g w i t h t e m p l a t e s ? Y o u ' v e a l l b e e n t a u g h t t o m a k e y o u r c o d e m o d u l a r s o  

t h a t i t c a n b e r e - u s a b l e , s o   e v e r y t h i n g   s h o u l d b e a t e m p l a t e , r i g h t ? W r o n g .  

T h e p r i n c i p a l p r o b l e m w i t h t e m p l a t e s i s t h a t t h e y c a n b e   v e r y   d i c u l t t o d e b u g { t e m -  

p l a t e s a r e e a s y t o u s e i f t h e y w o r k , b u t n d i n g a b u g i n t h e m c a n b e d i c u l t . I n p a r t t h i s  

i s b e c a u s e c u r r e n t g e n e r a t i o n C + + d e b u g g e r s d o n ' t r e a l l y u n d e r s t a n d t e m p l a t e s v e r y w e l l .  

N e v e r t h e l e s s , i t i s e a s i e r t o d e b u g a t e m p l a t e t h a n t w o n e a r l y i d e n t i c a l i m p l e m e n t a t i o n s t h a t  

d i e r o n l y i n t h e i r t y p e s .  

S o t h e b e s t a d v i c e i s { d o n ' t m a k e a c l a s s i n t o a t e m p l a t e u n l e s s t h e r e r e a l l y i s a n e a r  

t e r m u s e f o r t h e t e m p l a t e . A n d i f y o u d o n e e d t o i m p l e m e n t a t e m p l a t e , i m p l e m e n t a n d  

d e b u g a n o n - t e m p l a t e v e r s i o n r s t . O n c e t h a t i s w o r k i n g , i t w o n ' t b e h a r d t o c o n v e r t i t t o  

a t e m p l a t e . T h e n a l l y o u h a v e t o w o r r y a b o u t c o d e e x p l o s i o n { e . g . , y o u r p r o g r a m ' s o b j e c t  

c o d e i s n o w m e g a b y t e s b e c a u s e o f t h e 1 5 c o p i e s o f t h e h a s h t a b l e / l i s t / . . . r o u t i n e s , o n e f o r  

e a c h k i n d o f t h i n g y o u w a n t t o p u t i n a h a s h t a b l e / l i s t / . . . ( R e m e m b e r , y o u h a v e a n u n h e l p f u l  

c o m p i l e r ! )  

5 F e a t u r e s T o A v o i d L i k e t h e P l a g u e      

D e s p i t e t h e l e n g t h o f t h i s n o t e , t h e r e a r e n u m e r o u s f e a t u r e s i n C + + t h a t I h a v e n ' t e x p l a i n e d .  

I ' m s u r e e a c h f e a t u r e h a s i t s a d v o c a t e s , b u t d e s p i t e p r o g r a m m i n g i n C a n d C + + f o r o v e r 1 5  

y e a r s , I h a v e n ' t f o u n d a c o m p e l l i n g r e a s o n t o u s e t h e m i n a n y c o d e t h a t I ' v e w r i t t e n ( o u t s i d e  

o f a p r o g r a m m i n g l a n g u a g e c l a s s ! )  

I n d e e d , t h e r e i s a c o m p e l l i n g r e a s o n t o a v o i d u s i n g t h e s e f e a t u r e s { t h e y a r e e a s y t o m i s u s e ,  

r e s u l t i n g i n p r o g r a m s t h a t a r e h a r d e r t o r e a d a n d u n d e r s t a n d i n s t e a d o f e a s i e r t o u n d e r s t a n d .  

I n m o s t c a s e s , t h e f e a t u r e s a r e a l s o r e d u n d a n t { t h e r e a r e o t h e r w a y s o f a c c o m p l i s h i n g t h e  

s a m e e n d . W h y h a v e t w o w a y s o f d o i n g t h e s a m e t h i n g ? W h y n o t s t i c k w i t h t h e s i m p l e r  

o n e ?  

I d o n o t u s e a n y o f t h e f o l l o w i n g f e a t u r e s i n N a c h o s . I f y o u u s e t h e m ,   c a v e a t h a c k e r  . 

2 2 

Page 23: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 23/29

1 .  M u l t i p l e i n h e r i t a n c e .   I t i s p o s s i b l e i n C + + t o d e n e a c l a s s a s i n h e r i t i n g b e h a v i o r  

f r o m m u l t i p l e c l a s s e s ( f o r i n s t a n c e , a d o g i s b o t h a n a n i m a l a n d a f u r r y t h i n g ) . B u t i f  

p r o g r a m s u s i n g s i n g l e i n h e r i t a n c e c a n b e d i c u l t t o u n t a n g l e , p r o g r a m s w i t h m u l t i p l e  

i n h e r i t a n c e c a n g e t r e a l l y c o n f u s i n g .  

2 .  R e f e r e n c e s .   R e f e r e n c e v a r i a b l e s a r e r a t h e r h a r d t o u n d e r s t a n d i n g e n e r a l ; t h e y p l a y  

t h e s a m e r o l e a s p o i n t e r s , w i t h s l i g h t l y d i e r e n t s y n t a x ( u n f o r t u n a t e l y , I ' m n o t j o k -  

i n g ! ) T h e i r m o s t c o m m o n u s e i s t o d e c l a r e s o m e p a r a m e t e r s t o a f u n c t i o n a s   r e f e r e n c e  

p a r a m e t e r s  , a s i n P a s c a l . A c a l l - b y - r e f e r e n c e p a r a m e t e r c a n b e m o d i e d b y t h e c a l l i n g  

f u n c t i o n , w i t h o u t t h e c a l l e e h a v i n g t o p a s s a p o i n t e r . T h e e e c t i s t h a t p a r a m e t e r s  

l o o k ( t o t h e c a l l e r ) l i k e t h e y a r e c a l l e d b y v a l u e ( a n d t h e r e f o r e c a n ' t c h a n g e ) , b u t i n  

f a c t c a n b e t r a n s p a r e n t l y m o d i e d b y t h e c a l l e d f u n c t i o n . O b v i o u s l y , t h i s c a n b e a  

s o u r c e o f o b s c u r e b u g s , n o t t o m e n t i o n t h a t t h e s e m a n t i c s o f r e f e r e n c e s i n C + + a r e i n  

g e n e r a l n o t o b v i o u s .  

3 .  O p e r a t o r o v e r l o a d i n g .   C + + l e t s y o u r e d e n e t h e m e a n i n g s o f t h e o p e r a t o r s ( s u c h a s  

+  a n d  > >  ) f o r c l a s s o b j e c t s . T h i s i s d a n g e r o u s a t b e s t ( " e x a c t l y w h i c h i m p l e m e n t a t i o n  

o f ' + ' d o e s t h i s r e f e r t o ? " ) , a n d w h e n u s e d i n n o n - i n t u i t i v e w a y s , a s o u r c e o f g r e a t  

c o n f u s i o n , m a d e w o r s e b y t h e f a c t t h a t C + + d o e s i m p l i c i t t y p e c o n v e r s i o n , w h i c h c a n  

a e c t w h i c h o p e r a t o r i s i n v o k e d . U n f o r t u n a t e l y , C + + ' s I / O f a c i l i t i e s m a k e h e a v y u s e  

o f o p e r a t o r o v e r l o a d i n g a n d r e f e r e n c e s , s o y o u c a n ' t c o m p l e t e l y e s c a p e t h e m , b u t t h i n k  

t w i c e b e f o r e y o u r e d e n e ' + ' t o m e a n \ c o n c a t e n a t e t h e s e t w o s t r i n g s " .  

4 .  F u n c t i o n o v e r l o a d i n g .   Y o u c a n a l s o d e n e d i e r e n t f u n c t i o n s i n a c l a s s w i t h t h e  

s a m e n a m e b u t d i e r e n t a r g u m e n t t y p e s . T h i s i s a l s o d a n g e r o u s ( s i n c e i t ' s e a s y t o  

s l i p u p a n d g e t t h e u n i n t e n d e d v e r s i o n ) , a n d w e n e v e r u s e i t . W e w i l l a l s o a v o i d u s i n g  

d e f a u l t a r g u m e n t s ( f o r t h e s a m e r e a s o n ) . N o t e t h a t i t c a n b e a g o o d i d e a t o u s e t h e  

s a m e n a m e f o r f u n c t i o n s i n d i e r e n t c l a s s e s , p r o v i d e d t h e y u s e t h e s a m e a r g u m e n t s  

a n d b e h a v e t h e s a m e w a y { a g o o d e x a m p l e o f t h i s i s t h a t m o s t N a c h o s o b j e c t s h a v e  

a  P r i n t ( )   m e t h o d .  

5 .  S t a n d a r d t e m p l a t e l i b r a r y .   A n A N S I s t a n d a r d h a s e m e r g e d f o r a l i b r a r y o f r o u -  

t i n e s i m p l e m e n t i n g s u c h t h i n g s a s l i s t s , h a s h t a b l e s , e t c . , c a l l e d t h e s t a n d a r d t e m p l a t e  

l i b r a r y . U s i n g s u c h a l i b r a r y s h o u l d m a k e p r o g r a m m i n g m u c h s i m p l e r i f t h e d a t a s t r u c -  

t u r e y o u n e e d i s a l r e a d y p r o v i d e d i n t h e l i b r a r y . A l a s , t h e s t a n d a r d t e m p l a t e l i b r a r y  

p u s h e s t h e e n v e l o p e o f l e g a l C + + , a n d s o v i r t u a l l y n o c o m p i l e r s ( i n c l u d i n g g + + ) c a n  

s u p p o r t i t t o d a y . N o t t o m e n t i o n t h a t i t u s e s ( b i g s u r p r i s e ! ) r e f e r e n c e s , o p e r a t o r  

o v e r l o a d i n g , a n d f u n c t i o n o v e r l o a d i n g .  

6 .  E x c e p t i o n s .   T h e r e a r e t w o w a y s t o r e t u r n a n e r r o r f r o m a p r o c e d u r e . O n e i s s i m p l e  

{ j u s t d e n e t h e p r o c e d u r e t o r e t u r n a n e r r o r c o d e i f i t i s n ' t a b l e t o d o i t ' s j o b . F o r  

e x a m p l e , t h e s t a n d a r d l i b r a r y r o u t i n e   m a l l o c   r e t u r n s N U L L i f t h e r e i s n o a v a i l a b l e  

m e m o r y . H o w e v e r , l o t s o f p r o g r a m m e r s a r e l a z y a n d d o n ' t c h e c k e r r o r c o d e s . S o  

w h a t ' s t h e s o l u t i o n ? Y o u m i g h t t h i n k i t w o u l d b e t o g e t p r o g r a m m e r s w h o a r e n ' t l a z y ,  

2 3 

Page 24: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 24/29

b u t n o , t h e C + + s o l u t i o n i s t o a d d a p r o g r a m m i n g l a n g u a g e c o n s t r u c t ! A p r o c e d u r e  

c a n r e t u r n a n e r r o r b y \ r a i s i n g a n e x c e p t i o n " w h i c h e e c t i v e l y c a u s e s a   g o t o   b a c k u p  

t h e e x e c u t i o n s t a c k t o t h e l a s t p l a c e t h e p r o g r a m m e r p u t a n e x c e p t i o n h a n d l e r . Y o u  

w o u l d t h i n k t h i s i s t o o b i z a r r e t o b e t r u e , b u t u n f o r t u n a t e l y , I ' m n o t m a k i n g t h i s u p .  

W h i l e I ' m a t i t , t h e r e a r e a n u m b e r o f f e a t u r e s o f C t h a t y o u a l s o s h o u l d a v o i d , b e c a u s e  

t h e y l e a d t o b u g s a n d m a k e y o u r c o d e l e s s e a s y t o u n d e r s t a n d . S e e M a g u i r e ' s " W r i t i n g S o l i d  

C o d e " f o r a m o r e c o m p l e t e d i s c u s s i o n o f t h i s i s s u e . A l l o f t h e s e f e a t u r e s a r e l e g a l C ; w h a t ' s  

l e g a l i s n ' t n e c e s s a r i l y g o o d .  

1 . P o i n t e r a r i t h m e t i c . R u n a w a y p o i n t e r s a r e a p r i n c i p a l s o u r c e o f h a r d - t o - n d b u g s i n C  

p r o g r a m s , b e c a u s e t h e s y m p t o m o f t h i s h a p p e n i n g c a n b e m a n g l e d d a t a s t r u c t u r e s i n  

a c o m p l e t e l y d i e r e n t p a r t o f t h e p r o g r a m . D e p e n d i n g o n e x a c t l y w h i c h o b j e c t s a r e  

a l l o c a t e d o n t h e h e a p i n w h i c h o r d e r , p o i n t e r b u g s c a n a p p e a r a n d d i s a p p e a r , s e e m i n g l y  

a t r a n d o m . F o r e x a m p l e ,   p r i n t f   s o m e t i m e s a l l o c a t e s m e m o r y o n t h e h e a p , w h i c h c a n  

c h a n g e t h e a d d r e s s e s r e t u r n e d b y a l l f u t u r e c a l l s t o   n e w  . T h u s , a d d i n g a   p r i n t f   c a n 

c h a n g e t h i n g s s o t h a t a p o i n t e r w h i c h u s e d t o ( b y h a p p e n s t a n c e ) m a n g l e a c r i t i c a l d a t a  

s t r u c t u r e ( s u c h a s t h e m i d d l e o f a t h r e a d ' s e x e c u t i o n s t a c k ) , n o w o v e r w r i t e s m e m o r y  

t h a t m a y n o t e v e n b e u s e d .  

T h e b e s t w a y t o a v o i d r u n a w a y p o i n t e r s i s ( n o s u r p r i s e ) t o b e   v e r y   c a r e f u l w h e n u s i n g  

p o i n t e r s . I n s t e a d o f i t e r a t i n g t h r o u g h a n a r r a y w i t h p o i n t e r a r i t h m e t i c , u s e a s e p a r a t e  

i n d e x v a r i a b l e , a n d a s s e r t t h a t t h e i n d e x i s n e v e r l a r g e r t h a n t h e s i z e o f t h e a r r a y .  

O p t i m i z i n g c o m p i l e r s h a v e g o t t e n v e r y g o o d , s o t h a t t h e g e n e r a t e d m a c h i n e c o d e i s  

l i k e l y t o b e t h e s a m e i n e i t h e r c a s e .  

E v e n i f y o u d o n ' t u s e p o i n t e r a r i t h m e t i c , i t ' s s t i l l e a s y ( e a s y i s b a d i n t h i s c o n t e x t ! ) t o  

h a v e a n o - b y - o n e e r r r o r t h a t c a u s e s y o u r p r o g r a m t o s t e p b e y o n d t h e e n d o f a n a r r a y .  

H o w d o y o u x t h i s ? D e n e a c l a s s t o c o n t a i n t h e a r r a y   a n d i t s l e n g t h   ; b e f o r e a l l o w i n g  

a n y a c c e s s t o t h e a r r a y , y o u c a n t h e n c h e c k w h e t h e r t h e a c c e s s i s l e g a l o r i n e r r o r .  

2 . C a s t s f r o m i n t e g e r s t o p o i n t e r s a n d b a c k . A n o t h e r s o u r c e o f r u n a w a y p o i n t e r s i s t h a t  

C a n d C + + a l l o w y o u t o c o n v e r t i n t e g e r s t o p o i n t e r s , a n d b a c k a g a i n . N e e d l e s s t o s a y ,  

u s i n g a r a n d o m i n t e g e r v a l u e a s a p o i n t e r i s l i k e l y t o r e s u l t i n u n p r e d i c t a b l e s y m p t o m s  

t h a t w i l l b e v e r y h a r d t o t r a c k d o w n .  

I n a d d i t i o n , o n s o m e 6 4 b i t m a c h i n e s , s u c h a s t h e A l p h a , i t i s n o l o n g e r t h e c a s e t h a t  

t h e s i z e o f a n i n t e g e r i s t h e s a m e a s t h e t h e s i z e o f a p o i n t e r . I f y o u c a s t b e t w e e n  

p o i n t e r s a n d i n t e g e r s , y o u a r e a l s o w r i t i n g h i g h l y n o n - p o r t a b l e c o d e .  

3 . U s i n g b i t s h i f t i n p l a c e o f a m u l t i p l y o r d i v i d e . T h i s i s a c l a r i t y i s s u e . I f y o u a r e d o i n g  

a r i t h m e t i c , u s e a r i t h m e t i c o p e r a t o r s ; i f y o u a r e d o i n g b i t m a n i p u l a t i o n , u s e b i t w i s e  

o p e r a t o r s . I f I a m t r y i n g t o m u l t i p l y b y 8 , w h i c h i s e a s i e r t o u n d e r s t a n d ,   x < < 3  

o r  x * 8  ? I n t h e 7 0 ' s , w h e n C w a s b e i n g d e v e l o p e d , t h e f o r m e r w o u l d y i e l d m o r e  

e c i e n t m a c h i n e c o d e , b u t t o d a y ' s c o m p i l e r s g e n e r a t e t h e s a m e c o d e i n b o t h c a s e s , s o  

r e a d a b i l i t y s h o u l d b e y o u r p r i m a r y c o n c e r n .  

2 4 

Page 25: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 25/29

4 . A s s i g n m e n t i n s i d e c o n d i t i o n a l . M a n y p r o g r a m m e r s h a v e t h e a t t i t u d e t h a t s i m p l i c i t y  

e q u a l s s a v i n g a s m a n y k e y s t r o k e s a s p o s s i b l e . T h e r e s u l t c a n b e t o h i d e b u g s t h a t  

w o u l d o t h e r w i s e b e o b v i o u s . F o r e x a m p l e :  

i f ( x = y ) {  

. . . 

W a s t h e i n t e n t r e a l l y   x = = y  ? A f t e r a l l , i t ' s p r e t t y e a s y t o m i s t a k e n l y l e a v e o t h e  

e x t r a e q u a l s s i g n . B y n e v e r u s i n g a s s i g n m e n t w i t h i n a c o n d i t i o n a l , y o u c a n t e l l b y c o d e  

i n s p e c t i o n w h e t h e r y o u ' v e m a d e a m i s t a k e .  

5 . U s i n g   # d e f i n e   w h e n y o u c o u l d u s e   e n u m   . W h e n a v a r i a b l e c a n h o l d o n e o f a s m a l l  

n u m b e r o f v a l u e s , t h e o r i g i n a l C p r a c t i c e w a s t o u s e   # d e f i n e   t o s e t u p s y m b o l i c n a m e s  

f o r e a c h o f t h e v a l u e s .   e n u m   d o e s t h i s i n a t y p e - s a f e w a y { i t a l l o w s t h e c o m p i l e r t o  

v e r i f y t h a t t h e v a r i a b l e i s o n l y a s s i g n e d o n e o f t h e e n u m e r a t e d v a l u e s , a n d n o n e o t h e r .  

A g a i n , t h e a d v a n t a g e i s t o e l i m i n a t e a c l a s s o f e r r o r s f r o m y o u r p r o g r a m , m a k i n g i t  

q u i c k e r t o d e b u g .  

2 5 

Page 26: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 26/29

6 S t y l e G u i d e l i n e s    

E v e n i f y o u f o l l o w t h e a p p r o a c h I ' v e o u t l i n e d a b o v e , i t i s s t i l l a s e a s y t o w r i t e u n r e a d a b l e a n d  

u n d e b u g g a b l e c o d e i n C + + a s i t i s i n C , a n d p e r h a p s e a s i e r , g i v e n t h e m o r e p o w e r f u l f e a t u r e s  

t h e l a n g u a g e p r o v i d e s . F o r t h e N a c h o s p r o j e c t , a n d i n g e n e r a l , w e s u g g e s t y o u a d h e r e t o t h e  

f o l l o w i n g g u i d e l i n e s ( a n d t e l l u s i f y o u c a t c h u s b r e a k i n g t h e m ) :  

1 . W o r d s i n a n a m e a r e s e p a r a t e d S m a l l T a l k - s t y l e ( i . e . , c a p i t a l l e t t e r s a t t h e s t a r t o f e a c h  

n e w w o r d ) . A l l c l a s s n a m e s a n d m e m b e r f u n c t i o n n a m e s b e g i n w i t h a c a p i t a l l e t t e r ,  

e x c e p t f o r m e m b e r f u n c t i o n s o f t h e f o r m   g e t S o m e t h i n g ( )   a n d  s e t S o m e t h i n g ( )   , w h e r e  

S o m e t h i n g   i s a d a t a e l e m e n t o f t h e c l a s s ( i . e . , a c c e s s o r f u n c t i o n s ) . N o t e t h a t y o u w o u l d  

w a n t t o p r o v i d e s u c h f u n c t i o n s o n l y w h e n t h e d a t a s h o u l d b e v i s i b l e t o t h e o u t s i d e  

w o r l d , b u t y o u w a n t t o f o r c e a l l a c c e s s e s t o g o t h r o u g h o n e f u n c t i o n . T h i s i s o f t e n a  

g o o d i d e a , s i n c e y o u m i g h t a t s o m e l a t e r t i m e d e c i d e t o c o m p u t e t h e d a t a i n s t e a d o f  

s t o r i n g i t , f o r e x a m p l e .  

2 . A l l g l o b a l f u n c t i o n s s h o u l d b e c a p i t a l i z e d , e x c e p t f o r   m a i n   a n d l i b r a r y f u n c t i o n s , w h i c h  

a r e k e p t l o w e r - c a s e f o r h i s t o r i c a l r e a s o n s .  

3 . M i n i m i z e t h e u s e o f g l o b a l v a r i a b l e s . I f y o u n d y o u r s e l f u s i n g a l o t o f t h e m , t r y a n d  

g r o u p s o m e t o g e t h e r i n a c l a s s i n a n a t u r a l w a y o r p a s s t h e m a s a r g u m e n t s t o t h e  

f u n c t i o n s t h a t n e e d t h e m i f y o u c a n .  

4 . M i n i m i z e t h e u s e o f g l o b a l f u n c t i o n s ( a s o p p o s e d t o m e m b e r f u n c t i o n s ) . I f y o u w r i t e a  

f u n c t i o n t h a t o p e r a t e s o n s o m e o b j e c t , c o n s i d e r m a k i n g i t a m e m b e r f u n c t i o n o f t h a t  

o b j e c t .  

5 . F o r e v e r y c l a s s o r s e t o f r e l a t e d c l a s s e s , c r e a t e a s e p a r a t e   . h  l e a n d   . c c  l e . T h e   . h  l e 

a c t s a s t h e   i n t e r f a c e   t o t h e c l a s s , a n d t h e   . c c  l e a c t s a s t h e   i m p l e m e n t a t i o n   ( a g i v e n  

. c c  l e s h o u l d   i n c l u d e   i t ' s r e s p e c t i v e   . h  l e ) . I f u s i n g a p a r t i c u l a r   . h  l e r e q u i r e s  

a n o t h e r   . h  l e t o b e i n c l u d e d ( e . g . ,   s y n c h . h   n e e d s c l a s s d e n i t i o n s f r o m   t h r e a d . h   ) 

y o u s h o u l d i n c l u d e t h e d e p e n d e n c y i n t h e   . h  l e , s o t h a t t h e u s e r o f y o u r c l a s s d o e s n ' t  

h a v e t o t r a c k d o w n a l l t h e d e p e n d e n c i e s h i m s e l f . T o p r o t e c t a g a i n s t m u l t i p l e i n c l u s i o n ,  

b r a c k e t e a c h   . h  l e w i t h s o m e t h i n g l i k e :  

# i f n d e f S T A C K _ H  

# d e f i n e S T A C K _ H  

c l a s s S t a c k { . . . } ;  

# e n d i f  

S o m e t i m e s t h i s w i l l n o t b e e n o u g h , a n d y o u w i l l h a v e a c i r c u l a r d e p e n d e n c y . F o r  

e x a m p l e , y o u m i g h t h a v e a   . h  l e t h a t u s e s a d e n i t i o n f r o m o n e   . h  l e , b u t a l s o  

2 6 

Page 27: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 27/29

Page 28: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 28/29

Y o u s h o u l d u s e   g d b  t o d e b u g y o u r p r o g r a m r a t h e r t h a n   d b x  . D b x d o e s n ' t k n o w h o w t o  

d e c i p h e r C + + n a m e s , s o y o u w i l l s e e f u n c t i o n n a m e s l i k e   R u n _ _ 9 S c h e d u l e r P 6 T h r e a d   . 

O n t h e o t h e r h a n d , i n G D B ( b u t n o t D B X ) w h e n y o u d o a s t a c k b a c k t r a c e w h e n i n a  

f o r k e d t h r e a d ( i n h o m e w o r k 1 ) , a f t e r p r i n t i n g o u t t h e c o r r e c t f r a m e s a t t h e t o p o f t h e s t a c k ,  

t h e d e b u g g e r w i l l s o m e t i m e s g o i n t o a l o o p p r i n t i n g t h e l o w e r - m o s t f r a m e (  T h r e a d R o o t   ) , a n d  

y o u h a v e t o t y p e c o n t r o l - C w h e n i t s a y s \ m o r e ? " . I f y o u u n d e r s t a n d a s s e m b l y l a n g u a g e a n d  

c a n x t h i s , p l e a s e l e t m e k n o w .  

8 E x a m p l e : A S t a c k o f I n t e g e r s    

W e ' v e p r o v i d e d t h e c o m p l e t e , w o r k i n g c o d e f o r t h e s t a c k e x a m p l e . Y o u s h o u l d r e a d t h r o u g h  

i t a n d p l a y a r o u n d w i t h i t t o m a k e s u r e y o u u n d e r s t a n d t h e f e a t u r e s o f C + + d e s c r i b e d i n  

t h i s p a p e r .  

T o c o m p i l e t h e s i m p l e s t a c k t e s t , t y p e   m a k e a l l   { t h i s w i l l c o m p i l e t h e s i m p l e s t a c k t e s t  

(  s t a c k . c c  ) , t h e i n h e r i t e d s t a c k t e s t (  i n h e r i t s t a c k . c c   ) , a n d t h e t e m p l a t e v e r s i o n o f s t a c k s  

(  t e m p l a t e s t a c k . c c   ) . 

9 E p i l o g u e      

I ' v e a r g u e d i n t h i s n o t e t h a t y o u s h o u l d a v o i d u s i n g c e r t a i n C + + a n d C f e a t u r e s . B u t y o u ' r e  

p r o b a b l y t h i n k i n g I m u s t b e l e a v i n g s o m e t h i n g o u t { i f s o m e o n e p u t t h e f e a t u r e i n t h e  

l a n g u a g e , t h e r e m u s t b e a g o o d r e a s o n , r i g h t ? I b e l i e v e t h a t e v e r y p r o g r a m m e r s h o u l d s t r i v e  

t o w r i t e c o d e w h o s e b e h a v i o r w o u l d b e i m m e d i a t e l y o b v i o u s t o a r e a d e r ; i f y o u n d y o u r s e l f  

w r i t i n g c o d e t h a t w o u l d r e q u i r e s o m e o n e r e a d i n g t h e c o d e t o t h u m b t h r o u g h a m a n u a l i n  

o r d e r t o u n d e r s t a n d i t , y o u a r e a l m o s t c e r t a i n l y b e i n g w a y t o o s u b t l e . T h e r e ' s p r o b a b l y a  

m u c h s i m p l e r a n d m o r e o b v i o u s w a y t o a c c o m p l i s h t h e s a m e e n d . M a y b e t h e c o d e w i l l b e a  

l i t t l e l o n g e r t h a t w a y , b u t i n t h e r e a l w o r l d , i t ' s w h e t h e r t h e c o d e w o r k s a n d h o w s i m p l e i t  

i s f o r s o m e o n e e l s e t o m o d i f y , t h a t m a t t e r s a w h o l e l o t m o r e t h a n h o w m a n y c h a r a c t e r s y o u  

h a d t o t y p e .  

A n a l t h o u g h t t o r e m e m b e r :  

\ T h e r e a r e t w o w a y s o f c o n s t r u c t i n g a s o f t w a r e d e s i g n : o n e w a y i s t o m a k e i t s o  

s i m p l e t h a t t h e r e a r e   o b v i o u s l y   n o d e c i e n c i e s a n d t h e o t h e r w a y i s t o m a k e i t s o  

c o m p l i c a t e d t h a t t h e r e a r e n o   o b v i o u s   d e c i e n c i e s . "  

C . A . R . H o a r e , \ T h e E m p e r o r ' s O l d C l o t h e s " , C A C M F e b . 1 9 8 1  

1 0 F u r t h e r R e a d i n g      

J a m e s C o p l i e n , \ A d v a n c e d C + + " , A d d i s o n - W e s l e y . T h i s b o o k i s o n l y f o r e x p e r t s , b u t  

i t h a s s o m e g o o d i d e a s i n i t , s o k e e p i t i n m i n d o n c e y o u ' v e b e e n p r o g r a m m i n g i n C + +  

f o r a f e w y e a r s .  

2 8 

Page 29: Basic Concepts C++

8/8/2019 Basic Concepts C++

http://slidepdf.com/reader/full/basic-concepts-c 29/29

J a m e s G o s l i n g . \ T h e J a v a L a n g u a g e . " O n l i n e a t \ h t t p : / / j a v a . s u n . c o m / " J a v a i s a s a f e  

s u b s e t o f C + + . I t ' s m a i n a p p l i c a t i o n i s t h e s a f e e x t e n s i o n o f W e b b r o w s e r s b y a l l o w i n g  

y o u t o d o w n l o a d J a v a c o d e a s p a r t o f c l i c k i n g o n a l i n k t o i n t e r p r e t a n d d i s p l a y t h e  

d o c u m e n t . S a f e t y i s k e y h e r e , s i n c e a f t e r a l l , y o u d o n ' t w a n t t o c l i c k o n a W e b l i n k a n d  

h a v e i t d o w n l o a d c o d e t h a t w i l l c r a s h y o u r b r o w s e r . J a v a w a s d e n e d i n d e p e n d e n t l y  

o f t h i s d o c u m e n t , b u t i n t e r e s t i n g l y , i t e n f o r c e s a v e r y s i m i l a r s t y l e ( f o r e x a m p l e , n o  

m u l t i p l e i n h e r i t a n c e a n d n o o p e r a t o r o v e r l o a d i n g ) .  

C . A . R . H o a r e , \ T h e E m p e r o r ' s O l d C l o t h e s . "   C o m m u n i c a t i o n s o f t h e A C M   , V o l . 2 4 ,  

N o . 2 , F e b r u a r y 1 9 8 1 , p p . 7 5 - 8 3 . T o n y H o a r e ' s T u r i n g A w a r d l e c t u r e . H o w d o y o u  

b u i l d s o f t w a r e t h a t r e a l l y w o r k s ? A t t i t u d e i s e v e r y t h i n g { y o u n e e d a h e a l t h y r e s p e c t  

f o r h o w h a r d i t i s t o b u i l d w o r k i n g s o f t w a r e . I t m i g h t s e e m t h a t a d d d i n g t h i s w h i z - b a n g  

f e a t u r e i s o n l y \ a s m a l l m a t t e r o f c o d e " , b u t t h a t ' s t h e p a t h t o l a t e , b u g g y p r o d u c t s  

t h a t d o n ' t w o r k .  

B r i a n K e r n i g h a n a n d D e n n i s R i t c h i e , \ T h e C P r o g r a m m i n g L a n g u a g e " , P r e n t i c e - H a l l .  

T h e o r i g i n a l C b o o k { a v e r y e a s y r e a d . B u t t h e l a n g u a g e h a s e v o l v e d s i n c e i t w a s r s t  

d e s i g n e d , a n d t h i s b o o k d o e s n ' t d e s c r i b e a l l o f C ' s n e w e s t f e a t u r e s . B u t s t i l l t h e b e s t  

p l a c e f o r a b e g i n n e r t o s t a r t , e v e n w h e n l e a r n i n g C + + .  

S t e v e M a g u i r e , \ W r i t i n g S o l i d C o d e " , M i c r o s o f t P r e s s . H o w t o w r i t e b u g - f r e e s o f t w a r e ;  

I t h i n k t h i s s h o u l d b e r e q u i r e d r e a d i n g f o r a l l s o f t w a r e e n g i n e e r s . T h i s r e a l l y   w i l l   c h a n g e  

y o u r l i f e { i f y o u d o n ' t f o l l o w t h e r e c o m m e n d a t i o n s i n t h i s b o o k , y o u ' l l p r o b a b l y n e v e r  

w r i t e c o d e t h a t c o m p l e t e l y w o r k s , a n d y o u ' l l s p e n d y o u r e n t i r e l i f e s t r u g g l i n g w i t h h a r d  

t o n d b u g s . T h e r e i s a b e t t e r w a y ! C o n t r a r y t o t h e p r o g r a m m i n g l a n g u a g e t y p e s ,  

t h i s d o e s n ' t i n v o l v e p r o v i n g t h e c o r r e c t n e s s o f y o u r p r o g r a m s , w h a t e v e r t h a t m e a n s .  

I n s t e a d , M a g u i r e h a s a s e t o f p r a c t i c a l e n g i n e e r i n g s o l u t i o n s t o w r i t i n g s o l i d c o d e .  

S t e v e M a g u i r e , \ D e b u g g i n g t h e D e v e l o p m e n t P r o c e s s " , M i c r o s o f t P r e s s . M a g u i r e ' s  

f o l l o w u p b o o k o n h o w t o l e a d a n e e c t i v e t e a m , a n d b y t h e w a y , h o w t o b e a n e e c t i v e  

e n g i n e e r . M a g u i r e ' s b a c k g r o u n d i s t h a t h e i s a t u r n a r o u n d a r t i s t f o r M i c r o s o f t { h e  

g e t s a s s i g n e d t o o u n d e r i n g t e a m s , a n d g u r e s o u t h o w t o m a k e t h e m e e c t i v e . A f t e r  

y o u ' v e p u l l e d a f e w a l l - n i g h t e r s t o g e t t h a t l a s t b u g o u t o f y o u r c o u r s e p r o j e c t , y o u ' r e  

p r o b a b l y w o n d e r i n g w h y i n h e c k y o u ' r e s t u d y i n g c o m p u t e r s c i e n c e a n y w a y . T h i s b o o k  

w i l l e x p l a i n h o w t o w r i t e p r o g r a m s t h a t w o r k ,   a n d  s t i l l h a v e a l i f e !  

S c o t t M e y e r s , \ E e c t i v e C + + " . T h i s b o o k d e s c r i b e s h o w 5 0 e a s y w a y s t o m a k e m i s -  

t a k e s C + + ; i f y o u a v o i d t h e s e , y o u w i l l b e a l o t m o r e l i k e l y t o w r i t e C + + c o d e t h a t  

w o r k s .  

B j a r n e S t r o u s t r u p , \ T h e C + + P r o g r a m m i n g L a n g u a g e " , A d d i s o n - W e s l e y . T h i s s h o u l d  

b e t h e d e n i t e r e f e r e n c e m a n u a l , b u t i t i s n ' t . Y o u p r o b a b l y t h o u g h t I w a s j o k i n g w h e n  

I s a i d t h e C + + l a n g u a g e w a s c o n t i n u a l l y e v o l v i n g . I b o u g h t t h e s e c o n d e d i t i o n o f t h i s  

b o o k t h r e e y e a r s a g o , a n d i t i s a l r e a d y o u t o f d a t e . F o r t u n a t e l y , i t ' s s t i l l O K f o r t h e  

s u b s e t o f C + + t h a t I u s e .