C++ - 2

18
Pointer with Classes Operator Overloading CSE-201 Object Oriented Programming in C++ Basic Syntax - Part II Mahmudul Faisal Al Ameen June 4, 2013 Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 1/18

Transcript of C++ - 2

Pointer with Classes Operator Overloading

CSE-201 Object Oriented Programming in C++Basic Syntax - Part II

Mahmudul Faisal Al Ameen

June 4, 2013

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 1/18

Pointer with Classes Operator Overloading

Contents

1 Pointer with ClassesSyntaxKeyword ‘new’Keyword ‘delete’Holding address

2 Operator OverloadingSyntaxUnary Operator OverloadingBinary Operators

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 2/18

Pointer with Classes Operator Overloading

Syntax for Writing Pointer of Classes

Note: small letters are keyword or symbol.

CAPITAL letters are indicating a meaning of it.

Suppose we have

1 c l a s s CLASSNAME{2 MEMBERS3 } ;

Then how to declare an object/instance of the class?

How to declare a pointer of the class?

How to define/initialize the pointer of the class?

1 CLASSNAME OBJECTNAME;2 CLASSNAME∗ POINTERNAME;3 POINTERNAME = new CLASSNAME;

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 3/18

Pointer with Classes Operator Overloading

Syntaxt for Pointer of Classes

If we have parameters in the constructors then we may have

1 c l a s s CLASSNAME{2 CLASSNAME(PARAMETERS) ; // c o n s t r u c t o r w i th pa ramete r s3 } ;

In that case, we may also have

1 POINTERNAME = new CLASSNAME(ARGUMENTS) ;

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 4/18

Pointer with Classes Operator Overloading

Introduction to ‘new’

Listing 1: Creating a pointer of a class and instantiation using thekeyword ‘new’.

1 c l a s s X{23 } ;45 i n t main (){6 X ∗px ;7 px = new X;8 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 5/18

Pointer with Classes Operator Overloading

Keyword ‘new’

Listing 2: Use of ‘new’ with constructor that take argument(s).1 c l a s s X{2 i n t y ;3 pub l i c :4 X( i n t z ){5 y = z ;6 }7 } ;89 i n t main (){

10 X ∗px ;11 px = new X( 1 0 ) ;12 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 6/18

Pointer with Classes Operator Overloading

Pointer: Accessing Member

Listing 3: Accessing member of an object through the pointer.1 #inc lude<i o s t r eam>2 c l a s s X{3 i n t y ;4 pub l i c :5 X( i n t z ){6 y = z ;7 }8 i n t getY (){9 r e t u r n y ;

10 }11 } ;1213 i n t main (){14 X ∗px ;15 px = new X( 1 0 ) ;16 s td : : cout << px−>getY ( ) ;17 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 7/18

Pointer with Classes Operator Overloading

Pointer: Accessing Member (2)

Listing 4: Accessing member of an object through the pointer (yetanother example).

1 #inc lude<i o s t r eam>2 c l a s s X{3 i n t y ;4 pub l i c :5 X( i n t z ){6 y = z ;7 }8 i n t i n c ( i n t z ){9 r e t u r n z+1;

10 }11 } ;1213 i n t main (){14 X ∗px ;15 px = new X( 1 0 ) ;16 i n t v ;17 s td : : c i n >> v ;18 s td : : cout<< px−>i n c ( v ) ;19 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 8/18

Pointer with Classes Operator Overloading

‘delete’

Listing 5: Using the keyword ‘delete’ to destroy an object frommemory.

1 #inc lude<i o s t r eam>2 c l a s s X{3 i n t y ;4 pub l i c :5 X( i n t z ){6 y = z ;7 }8 i n t i n c ( i n t z ){9 r e t u r n z+1;

10 }11 } ;1213 i n t main (){14 X ∗px ;15 px = new X( 1 0 ) ;16 i n t v ;17 s td : : c i n >> v ;18 s td : : cout<< px−>i n c ( v ) ;19 de l e t e px ;20 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 9/18

Pointer with Classes Operator Overloading

Pointer: Holding Address

Listing 6: Using the pointer to hold address of an object.1 #inc lude<i o s t r eam>2 c l a s s X{3 pub l i c :4 i n t i n c ( i n t z ){5 r e t u r n z+1;6 }7 } ;89 i n t main (){

10 X ∗px ;11 X ox ;12 px = &ox ;13 i n t v ;14 s td : : c i n >> v ;15 s td : : cout << px−>i n c ( v ) << s t d : : e nd l ;16 s td : : cout << ox . i n c ( v ) << s t d : : e nd l ;17 s td : : cout << px ;18 // d e l e t e px ;19 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 10/18

Pointer with Classes Operator Overloading

Use of Pointer in Function

Listing 7: A good example of usage of pointer (as parameter) infunction calling.

1 #inc lude<i o s t r eam>2 c l a s s Y{3 pub l i c :4 i n t v a l ;5 } ;6 c l a s s X{7 pub l i c :8 vo id fn1 (Y z ){9 z . v a l = z . v a l + 1 ;

10 }11 vo id fn2 (Y∗ z ){12 z−>v a l = z−>v a l + 1 ;13 }14 } ;15 i n t main (){16 Y py1 ;17 Y∗ py2 = new Y;18 X x ;19 py1 . v a l = 11 ;20 x . fn1 ( py1 ) ;21 s td : : cout << py1 . v a l << s t d : : e nd l ;22 py2−>v a l = 11 ;23 x . fn2 ( py2 ) ;24 s td : : cout << py2−>v a l << s t d : : e nd l ;25 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 11/18

Pointer with Classes Operator Overloading

Syntax

1 c l a s s CLASSNAME{2 pub l i c :3 vo id ope ra to r UNARY OPERATOR( ) ;4 CLASSNAME ope ra to r NON COMPARISON OPERATOR(CLASSNAME OBJECT PARAMETER) ;5 boo l ope ra to r COMPARISON OPERATOR(CLASSNAME OBJECT PARAMETER) ;6 } ;78 vo id CLASSNAME : : ope ra to r UNIRAY OPERATOR(){9 UNARY OPERATIONS OVER PROPERTIES ;

10 }1112 CLASSNAME CLASSNAME : : ope ra to r ARITHMETIC OPERATOR(CLASSNAME OBJECT PARAMETER){13 BINARY ARITHMETIC OPERATIONS OVER PROPERTIES ;14 r e t u r n OBJECT OF CLASSNAME ;15 }1617 boo l CLASSNAME : : ope ra to r COMPARISON OPERATOR(CLASSNAME OBJECT PARAMETER){18 boo l VARIABLE NAME = COMPARISON OPERATIONS OVER PROPERTIES ;19 r e t u r n VARIABLE NAME ;20 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 12/18

Pointer with Classes Operator Overloading

Overloading Prefix increment operator

Listing 8: It shows how to redefine the operator ‘++’ (prefix) for aclass.

1 #inc lude<i o s t r eam>2 c l a s s U{3 p r i v a t e :4 i n t t ;5 pub l i c :6 U( i n t ) ;7 vo id ope ra to r++();8 i n t getT ( ) ;9 } ;

10 U : : U( i n t n){11 t = n ;12 }13 vo id U : : ope ra to r++(){14 t ++;15 }16 i n t U : : getT (){17 r e t u r n t ;18 }1920 i n t main (){21 U objU ( 5 ) ;22 ++objU ;23 s td : : cout << objU . getT ( ) ;24 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 13/18

Pointer with Classes Operator Overloading

Operator Overloading: Post-fix increment

Listing 9: It shows how to redefine the operator ‘++’ (post-fix) fora class.

1 #inc lude<i o s t r eam>2 c l a s s U{3 p r i v a t e :4 i n t t ;5 pub l i c :6 U ( ) ;7 U( i n t ) ;8 U ope ra to r++( i n t ) ;9 i n t getT ( ) ;

10 } ;11 U : : U(){}12 U : : U( i n t n){ t = n ; }13 U U : : ope ra to r++( i n t n){14 U u ( t ) ;15 t ++ ;16 r e t u r n u ;17 }18 i n t U : : getT (){ r e t u r n t ; }19 i n t main (){20 U objU ( 5 ) ;21 U pu ( 0 ) ;22 pu = objU++;23 s td : : cout << objU . getT ( ) << s t d : : e nd l ;24 s td : : cout << pu . getT ( ) ;25 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 14/18

Pointer with Classes Operator Overloading

Overloading Operator: +=

Listing 10: Overloading of a binary operator.1 #inc lude<i o s t r eam>2 c l a s s U{3 p r i v a t e :4 i n t t ;5 pub l i c :6 U ( ) ;7 U( i n t ) ;8 vo id ope ra to r+=(U) ;9 i n t getT ( ) ;

10 } ;11 U : : U(){}12 U : : U( i n t n){ t = n ; }13 vo id U : : ope ra to r+=(U u){14 t += u . getT ( ) ;15 i f ( t > 10)16 t −= 10 ;17 }18 i n t U : : getT (){ r e t u r n t ; }19 i n t main (){20 U objU (7 ) , pu ( 2 ) ;21 objU += pu ;22 s td : : cout << objU . getT ( ) << s t d : : e nd l ;23 objU += pu ;24 s td : : cout << objU . getT ( ) ;25 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 15/18

Pointer with Classes Operator Overloading

Exercise

Overload operators −=, >>= and ∗=

Overload operators |, & and ˆ.

Overload operators +, − and /.

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 16/18

Pointer with Classes Operator Overloading

Overloading: ==

Listing 11: Overloading comparison operator.1 #inc lude<i o s t r eam>2 c l a s s U{3 p r i v a t e :4 i n t t ;5 char c ;6 pub l i c :7 U( i n t , char ) ;8 boo l ope ra to r==(U) ;9 } ;

10 U : : U( i n t n , char m){11 t = n ;12 c = m;13 }14 boo l U : : ope ra to r==(U u){15 r e t u r n u . t == t && u . c == c ;16 }1718 i n t main (){19 U ob j1 (7 , ’ x ’ ) ;20 U ob j2 (7 , ’ y ’ ) ;21 U ob j3 (7 , ’ x ’ ) ;22 s td : : cout << ( ob j1 == obj2 ) << s t d : : e nd l ;23 s td : : cout << ( ob j1 == obj3 ) ;24 }

Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 17/18

Pointer with Classes Operator Overloading

Overloading: <

Listing 12: Overloading another comparison operator.1 #inc lude<i o s t r eam>2 c l a s s U{3 p r i v a t e :4 i n t t ;5 char c ;6 pub l i c :7 U( i n t , char ) ;8 boo l operator<(U) ;9 } ;

10 U : : U( i n t n , char m){11 t = n ;12 c = m;13 }14 boo l U : : operator<(U u){15 i f ( t < u . t )16 r e t u r n t rue ;17 e l s e i f ( t > u . t )18 r e t u r n f a l s e ;19 e l s e{20 r e t u r n c < u . c ;21 }22 }23 i n t main (){24 U ob j1 (7 , ’ x ’ ) , ob j2 (3 , ’ y ’ ) , ob j3 (7 , ’ y ’ ) ;25 s td : : cout << ( ob j1 < ob j2 ) << s t d : : e nd l ;26 s td : : cout << ( ob j1 < ob j3 ) << s t d : : e nd l ;27 s td : : cout << ( ob j2 < ob j3 ) << s t d : : e nd l ;28 }Mahmudul Faisal Al Ameen — CSE-201 Object Oriented Programming in C++ 18/18