SlideShare a Scribd company logo
Overloading Operators
Understanding the Benefits  of Overloading Having more than one function with the same name is beneficial because you can use one easy-to-understand function name without paying attention to the data types involved Polymorphism allows the same operation to be carried out differently, depending on the object Some reserve the term polymorphism (or pure polymorphism) for situations in which one function body is used with a variety of arguments
Using the + Operator  Polymorphically Separate actions can result from what seems to be the same operation or command The + operator has a variety of meanings, which include: Alone before a value (called unary form), + indicates a positive values, as in the expression +7 Between two integers (called binary form), + indicates integer addition, as in the expression 5+ 9 Between two floating-point numbers (also called binary form), + indicates floating-point addition, as in the expression 6.4 + 2.1
Overloading Operators— The Rules Operator overloading is the process by which you apply operators to your own abstract data types The +, -, *, and / symbols make it easy to work with built-in data types such as int and double Classes, however, contain a variety of data members As a result, if you want the compiler to perform arithmetic with two class objects, you must tell the compiler what you mean Good programming style dictates that you endow the operator with a reasonable meaning
Overloading Operators— The Rules You overload an operator by making it a function; subsequently, you can use it just like any other function C++ operators are classified as unary or binary, depending on whether they take one or two arguments, respectively
Binary Operators that Can  Be Overloaded
Overloading Operators— The Rules Associativity  refers to the order in which actions within an expression are carried out You cannot change associativity when you overload operators You also cannot change the normal precedence of any operator
Overloading Operators— The Rules
Overloading Math Operators When you code an expression such as 4 + 7, C++ understands that you intend to carry out binary integer addition because of the context of the + symbol When you code an expression such as  regularSal  +  bonus , if C++ can recognize  regularSal  and  bonus  as declared double variables, then floating-point addition takes place The name of the operator function that overloads the + symbol is  operator+()
Overloading Math Operators Ex8-1
Overloading Math Operators The operator+() function in Figure 8-1 can work like any other member function  When you examine the code for the addTwo() and operator+() functions in Figure 8-1, you see that the only difference is the function name Instead of the awkward  sum = clerk.operator+(driver);,  the operator+() function allows you to leave off the word operator in the function name and add either of the following statements: sum = clerk + driver; sum = driver + clerk;
Overloading Math Operators
Paying Attention to the  Order of the Operands You can choose to overload any of the arithmetic operators for any classes you develop Then you can use the corresponding operator symbol in a natural way with class objects
Overloading an Operator to Work with a Class Object  and a Primitive Type When you add two objects using the + operator, the objects do not have to be the same type You can add an integer and a double with an expression such as 5 + 7.84 Ex8-3
Overloading an Operator to Work with a Class Object and a Primitive Type You cannot overload operators that work with C++’s built-in data types You cannot overload the + that works with two doubles to make it do anything but add two doubles Similarly, you can’t overload operators whose first operand is an object that is a built-in type, even if the second operand is a class object
Using Multiple Operations  in a Statement Most modern programming languages allow several operators to be used in the same statement If you want to sum three values in an older programming language such as assembler or RPG, you first must add two values, producing a temporary total Then, in a separate statement, you add the third value to that total
The Sale Class Ex8-4
Using Multiple Operations  in a Statement Because the associativity of addition occurs from left to right, the attempt to execute the addition highlighted in Figure 8-9 follows this sequence: 1. The left-most + operator is encountered, and C++ recognizes a Sale on each side of the + symbol.  The overloaded operator+() function is called, and saleAmounts for a Shirt and a Tie are added.  A double is returned 2. The next + operator is encountered.  A Sale object is found as the operand to the right of the +, but a double value is used as the operand to the left
Program that Adds Three  Sale Objects Ex8-4
Using Multiple Operations  in a Statement When the Sale class operator+() function does not return a double, but instead returns an object of Sale type (as shown in Figure 8-8), the multiple addition works correctly The sequence of events now occurs as follows: 1. The left-most + operator is encountered, and C++ recognizes a Sale object on each side of the + symbol.  The overloaded operator+() function is called, and saleAmounts for a Shirt and a Tie are added 2. The next + operator is encountered.  A Sale object now is found on each side of the +—the temporary object returned by the first addition, and the pants object 3. The temporary object is assigned to the total Sale object
Using Multiple Operations in a Statement The results of the execution of the program in Figure 8-9 are shown in Figure 8-10 C++ forces you to use the built-in precedence rules for your class operators If you want to be able to add either a double or a Sale object to a Sale object, then simply write both versions of the overloaded operator for the class
Overloading Output The << operator also is overloaded by C++ It is both a bitwise left-shift operator and an output operator; it is called the insertion operator when used for output The << operator acts as an output operator only when  cout  (or another output stream object) appears on the left side When you use  cout  in a program, you must include #include<iostream.h> The preceding function, called operator<<(), returns a reference to ostream
Overloading Output It accepts two arguments: a reference to ostream (locally named  out  in this example) and an integer (locally named i n  in this example) C++ overloads the << operator to work with the built-in data types; you also may overload the << operator to work with your own classes To overload << operator so it can work with a Sale object, you must add the overloaded operator <<() function to the Sale class
Overloading Output The operator <<() function is a friend to the class of the object it wants to print out, e.g. Sale here.
Overloading Input If the << operator can be overloaded for output, it makes sense that the >> operator also can be overloaded for input The advantage of overloading operators such as >> is that the resulting programs look cleaner and are easier to read You can create an extraction operator, or operator>>() function, that uses istream (which is defined in iostream.h, along with ostream) by using a prototype as follows: friend istream& operator>>(istream &in, Sale &Sale);
Overloaded Operator>>() Function for the Sale Class
Overloading Input Ex8-6
Overloading ++ and - - With C++, you use ++ to increment variables, and - - to decrement variables When a prefix operator such as ++ is used in an expression, the mathematical operation takes place before the expression is evaluated When the postfix operator is used, the expression is evaluated before the mathematical operation takes place Within the operator ++() function in the Inventory class, you can write the statement that increases numSold in several different ways
Using the Prefix and Postfix ++ Operators with an Integer
The Inventory Class
Overloading ++ and - - The statements numSold++;, numSold = numSold +1;, and numSold += 1; all would work 8 Ex8-8
Using Postfix Increment and Decrement Operators A problem arises if you want to use a postfix ++ operator as well as a prefix ++ operator with a class When you overload any C++ function, you must supply different argument lists; for the postfix ++ operator, you use an integer argument The Inventory class postfix operator ++() function prototype is:  Inventory& operator++(int); Ex8-8
Overloading the = = Operator Writing an operator = =() function should be an easy task You simply decide what will constitute equality in class members When you create your own classes, you choose whether equivalency means that every data field must be equivalent, or only specific data members The operator = =() function may return either an integer or a boolean variable representing true or false 8
Overloading the = = Operator A variable of type  bool  can hold one of two values: true or false Some older C++ compilers do not support the bool type; with those compilers you would use the first version of operator = =() that returns an integer EX8-9
Overloading the = Operator The = operator can be overloaded for use with your own classes Unlike other operators, if you don’t define the = operator, C++ provides a definition for you If you want the = operator to do something other than assign each member, then you must create a customer operator=()function In addition, if the class contains data fields that are pointers, you should create a custom function EX8-9
Overloading [ ] and ( ) The  subscript operator , operator[ ], is declared like any other function, but called in a manner similar to accessing an array element You can include any instructions you want within an operator [ ] function Typically, you use this function to perform a task that both requires an argument and does not quite fit into another operator’s usual meaning
The Book Class Ex8-10
Overloading [ ] and ( )
Using the Parentheses  Operator You can use the  parentheses operator  to make multiple assignments within a class To overload the parentheses operator to assign both an author and a price to a member of the Book class, you can create the function
Using the Parentheses  Operator

More Related Content

DOCX
Operator oveerloading
PPTX
OPERATOR OVERLOADING IN C++
PPTX
Operator overloading
PPTX
Operator overloading
PPTX
PDF
Functions in c++
PDF
Input and output in c++
PPTX
Operator overloadng
Operator oveerloading
OPERATOR OVERLOADING IN C++
Operator overloading
Operator overloading
Functions in c++
Input and output in c++
Operator overloadng

What's hot (20)

PPTX
Functions in c language
PDF
Cpp functions
PPTX
Introduction to Matlab Scripts
PDF
cp Module4(1)
PPTX
Manipulators
PDF
Cp module 2
PPT
Savitch ch 04
PDF
PPTX
Method parameters in c#
PDF
Pointers in c++
PPT
Synapse india complain sharing info on chapter 8 operator overloading
PPT
Functions
PPTX
Unit 7. Functions
PDF
Maxbox starter19
PPTX
Sample for Simple C Program - R.D.Sivakumar
PPTX
Operator overloaing
PPTX
Java 8 - An Overview
PDF
C# Fundamentals - Basics of OOPS - Part 2
PDF
Stacks
Functions in c language
Cpp functions
Introduction to Matlab Scripts
cp Module4(1)
Manipulators
Cp module 2
Savitch ch 04
Method parameters in c#
Pointers in c++
Synapse india complain sharing info on chapter 8 operator overloading
Functions
Unit 7. Functions
Maxbox starter19
Sample for Simple C Program - R.D.Sivakumar
Operator overloaing
Java 8 - An Overview
C# Fundamentals - Basics of OOPS - Part 2
Stacks
Ad

Similar to 08 c-operator-overloadingppt2563 (20)

PPTX
Operator overloading
PDF
overloading in C++
PPT
Polymorphism and function overloading_new.ppt
PPTX
Operator overloading
PDF
Ch-4-Operator Overloading.pdf
PPT
Unary operator overloading
PPT
Lec 28 - operator overloading
PPT
Lec 26.27-operator overloading
PPTX
PPTX
Programming presentation
PPTX
C++.pptx
PPT
Operator overloading in C++
PPT
3d7b7 session4 c++
PPT
Binary operator overloading
PDF
NIKUL SURANI
DOCX
Functions in c++
PPTX
Operator Overloading
PDF
Operator overloading
PDF
Chapter24 operator-overloading
PDF
Basics _of_Operator Overloading_Somesh_Kumar_SSTC
Operator overloading
overloading in C++
Polymorphism and function overloading_new.ppt
Operator overloading
Ch-4-Operator Overloading.pdf
Unary operator overloading
Lec 28 - operator overloading
Lec 26.27-operator overloading
Programming presentation
C++.pptx
Operator overloading in C++
3d7b7 session4 c++
Binary operator overloading
NIKUL SURANI
Functions in c++
Operator Overloading
Operator overloading
Chapter24 operator-overloading
Basics _of_Operator Overloading_Somesh_Kumar_SSTC
Ad

Recently uploaded (20)

PDF
Machine learning based COVID-19 study performance prediction
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Encapsulation theory and applications.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Machine learning based COVID-19 study performance prediction
Programs and apps: productivity, graphics, security and other tools
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Encapsulation theory and applications.pdf
Spectroscopy.pptx food analysis technology
Encapsulation_ Review paper, used for researhc scholars
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Empathic Computing: Creating Shared Understanding
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Understanding_Digital_Forensics_Presentation.pptx
Big Data Technologies - Introduction.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?

08 c-operator-overloadingppt2563

  • 2. Understanding the Benefits of Overloading Having more than one function with the same name is beneficial because you can use one easy-to-understand function name without paying attention to the data types involved Polymorphism allows the same operation to be carried out differently, depending on the object Some reserve the term polymorphism (or pure polymorphism) for situations in which one function body is used with a variety of arguments
  • 3. Using the + Operator Polymorphically Separate actions can result from what seems to be the same operation or command The + operator has a variety of meanings, which include: Alone before a value (called unary form), + indicates a positive values, as in the expression +7 Between two integers (called binary form), + indicates integer addition, as in the expression 5+ 9 Between two floating-point numbers (also called binary form), + indicates floating-point addition, as in the expression 6.4 + 2.1
  • 4. Overloading Operators— The Rules Operator overloading is the process by which you apply operators to your own abstract data types The +, -, *, and / symbols make it easy to work with built-in data types such as int and double Classes, however, contain a variety of data members As a result, if you want the compiler to perform arithmetic with two class objects, you must tell the compiler what you mean Good programming style dictates that you endow the operator with a reasonable meaning
  • 5. Overloading Operators— The Rules You overload an operator by making it a function; subsequently, you can use it just like any other function C++ operators are classified as unary or binary, depending on whether they take one or two arguments, respectively
  • 6. Binary Operators that Can Be Overloaded
  • 7. Overloading Operators— The Rules Associativity refers to the order in which actions within an expression are carried out You cannot change associativity when you overload operators You also cannot change the normal precedence of any operator
  • 9. Overloading Math Operators When you code an expression such as 4 + 7, C++ understands that you intend to carry out binary integer addition because of the context of the + symbol When you code an expression such as regularSal + bonus , if C++ can recognize regularSal and bonus as declared double variables, then floating-point addition takes place The name of the operator function that overloads the + symbol is operator+()
  • 11. Overloading Math Operators The operator+() function in Figure 8-1 can work like any other member function When you examine the code for the addTwo() and operator+() functions in Figure 8-1, you see that the only difference is the function name Instead of the awkward sum = clerk.operator+(driver);, the operator+() function allows you to leave off the word operator in the function name and add either of the following statements: sum = clerk + driver; sum = driver + clerk;
  • 13. Paying Attention to the Order of the Operands You can choose to overload any of the arithmetic operators for any classes you develop Then you can use the corresponding operator symbol in a natural way with class objects
  • 14. Overloading an Operator to Work with a Class Object and a Primitive Type When you add two objects using the + operator, the objects do not have to be the same type You can add an integer and a double with an expression such as 5 + 7.84 Ex8-3
  • 15. Overloading an Operator to Work with a Class Object and a Primitive Type You cannot overload operators that work with C++’s built-in data types You cannot overload the + that works with two doubles to make it do anything but add two doubles Similarly, you can’t overload operators whose first operand is an object that is a built-in type, even if the second operand is a class object
  • 16. Using Multiple Operations in a Statement Most modern programming languages allow several operators to be used in the same statement If you want to sum three values in an older programming language such as assembler or RPG, you first must add two values, producing a temporary total Then, in a separate statement, you add the third value to that total
  • 17. The Sale Class Ex8-4
  • 18. Using Multiple Operations in a Statement Because the associativity of addition occurs from left to right, the attempt to execute the addition highlighted in Figure 8-9 follows this sequence: 1. The left-most + operator is encountered, and C++ recognizes a Sale on each side of the + symbol. The overloaded operator+() function is called, and saleAmounts for a Shirt and a Tie are added. A double is returned 2. The next + operator is encountered. A Sale object is found as the operand to the right of the +, but a double value is used as the operand to the left
  • 19. Program that Adds Three Sale Objects Ex8-4
  • 20. Using Multiple Operations in a Statement When the Sale class operator+() function does not return a double, but instead returns an object of Sale type (as shown in Figure 8-8), the multiple addition works correctly The sequence of events now occurs as follows: 1. The left-most + operator is encountered, and C++ recognizes a Sale object on each side of the + symbol. The overloaded operator+() function is called, and saleAmounts for a Shirt and a Tie are added 2. The next + operator is encountered. A Sale object now is found on each side of the +—the temporary object returned by the first addition, and the pants object 3. The temporary object is assigned to the total Sale object
  • 21. Using Multiple Operations in a Statement The results of the execution of the program in Figure 8-9 are shown in Figure 8-10 C++ forces you to use the built-in precedence rules for your class operators If you want to be able to add either a double or a Sale object to a Sale object, then simply write both versions of the overloaded operator for the class
  • 22. Overloading Output The << operator also is overloaded by C++ It is both a bitwise left-shift operator and an output operator; it is called the insertion operator when used for output The << operator acts as an output operator only when cout (or another output stream object) appears on the left side When you use cout in a program, you must include #include<iostream.h> The preceding function, called operator<<(), returns a reference to ostream
  • 23. Overloading Output It accepts two arguments: a reference to ostream (locally named out in this example) and an integer (locally named i n in this example) C++ overloads the << operator to work with the built-in data types; you also may overload the << operator to work with your own classes To overload << operator so it can work with a Sale object, you must add the overloaded operator <<() function to the Sale class
  • 24. Overloading Output The operator <<() function is a friend to the class of the object it wants to print out, e.g. Sale here.
  • 25. Overloading Input If the << operator can be overloaded for output, it makes sense that the >> operator also can be overloaded for input The advantage of overloading operators such as >> is that the resulting programs look cleaner and are easier to read You can create an extraction operator, or operator>>() function, that uses istream (which is defined in iostream.h, along with ostream) by using a prototype as follows: friend istream& operator>>(istream &in, Sale &Sale);
  • 26. Overloaded Operator>>() Function for the Sale Class
  • 28. Overloading ++ and - - With C++, you use ++ to increment variables, and - - to decrement variables When a prefix operator such as ++ is used in an expression, the mathematical operation takes place before the expression is evaluated When the postfix operator is used, the expression is evaluated before the mathematical operation takes place Within the operator ++() function in the Inventory class, you can write the statement that increases numSold in several different ways
  • 29. Using the Prefix and Postfix ++ Operators with an Integer
  • 31. Overloading ++ and - - The statements numSold++;, numSold = numSold +1;, and numSold += 1; all would work 8 Ex8-8
  • 32. Using Postfix Increment and Decrement Operators A problem arises if you want to use a postfix ++ operator as well as a prefix ++ operator with a class When you overload any C++ function, you must supply different argument lists; for the postfix ++ operator, you use an integer argument The Inventory class postfix operator ++() function prototype is: Inventory& operator++(int); Ex8-8
  • 33. Overloading the = = Operator Writing an operator = =() function should be an easy task You simply decide what will constitute equality in class members When you create your own classes, you choose whether equivalency means that every data field must be equivalent, or only specific data members The operator = =() function may return either an integer or a boolean variable representing true or false 8
  • 34. Overloading the = = Operator A variable of type bool can hold one of two values: true or false Some older C++ compilers do not support the bool type; with those compilers you would use the first version of operator = =() that returns an integer EX8-9
  • 35. Overloading the = Operator The = operator can be overloaded for use with your own classes Unlike other operators, if you don’t define the = operator, C++ provides a definition for you If you want the = operator to do something other than assign each member, then you must create a customer operator=()function In addition, if the class contains data fields that are pointers, you should create a custom function EX8-9
  • 36. Overloading [ ] and ( ) The subscript operator , operator[ ], is declared like any other function, but called in a manner similar to accessing an array element You can include any instructions you want within an operator [ ] function Typically, you use this function to perform a task that both requires an argument and does not quite fit into another operator’s usual meaning
  • 37. The Book Class Ex8-10
  • 38. Overloading [ ] and ( )
  • 39. Using the Parentheses Operator You can use the parentheses operator to make multiple assignments within a class To overload the parentheses operator to assign both an author and a price to a member of the Book class, you can create the function