C++ - 2
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