SlideShare a Scribd company logo
Unit - III

Operator Overloading
Customised behaviour of operators
Unit Introduction
This unit covers operator overloading
Unit Objectives







After covering this unit you will understand…
Operator overloading
Different types of operator and their
overloading
Operators that cannot be overloaded
Inheritance and overloading
Automatic type conversion
Introduction


Operator overloading








Enabling C++’s operators to work with class
objects
Using traditional operators with user-defined
objects
Requires great care; when overloading is misused,
program difficult to understand
Examples of already overloaded operators





4

Operator << is both the stream-insertion operator and
the bitwise left-shift operator
+ and -, perform arithmetic on multiple types

Compiler generates the appropriate code based on
the manner in which the operator is used


Overloading an operator
Write function definition as normal
 Function name is keyword operator followed by
the symbol for the operator being overloaded
 operator+ used to overload the addition
operator (+)




Using operators


To use an operator on a class object it must be
overloaded unless the assignment operator(=)or
the address operator(&)
Assignment operator by default performs memberwise
assignment
 Address operator (&) by default returns the address of an
object


5
Restrictions on Operator Overloading



Operators that can be overloaded
C++ operators that can be overloaded
+

*

/

%

^

&

|

~

!

=

<

>

+=

-=

*=

/=

%=

^=

&=

|=

<<

>>

>>=

<<=

==

!=

<=

>=

&&

||

++

--

->*

,

->

[]

()

new

delete

new[]



-

delete[]

C++ Operators that cannot be overloaded
Operators that cannot be overloaded
.

6

.*

::

?:

sizeof
Restrictions on Operator Overloading






7

Overloading restrictions
 Precedence of an operator cannot be changed
 Associativity of an operator cannot be changed
 Arity (number of operands) cannot be changed
 Unary operators remain unary, and binary operators
remain binary
 Operators &, *, + and - each have unary and binary
versions
 Unary and binary versions can be overloaded separately
No new operators can be created
 Use only existing operators
No overloading operators for built-in types
 Cannot change how two integers are added
 Produces a syntax error
Operator Functions as Class
Members vs. as friend Functions






8

Member vs non-member
 In general, operator functions can be member or non-member
functions
 When overloading ( ), [ ], -> or any of the assignment
operators, must use a member function
Operator functions as member functions
 Leftmost operand must be an object (or reference to an object)
of the class
 If left operand of a different type, operator function must be
a non-member function
Operator functions as non-member functions
 Must be friends if needs to access private or protected
members
 Enable the operator to be commutative
Overloading Stream-Insertion and Stream-Extraction
Operators


Overloaded << and >> operators
Overloaded to perform input/output for userdefined types
 Left operand of types ostream & and istream
&
 Must be a non-member function because left
operand is not an object of the class
 Must be a friend function to access private data
members


9
Overloading Unary Operators


Overloading unary operators
Can be overloaded with no arguments or one
argument
 Should usually be implemented as member functions






Avoid friend functions and classes because they
violate the encapsulation of a class

Example declaration as a member function:
class String {
public:
bool operator!() const;
...
};

10
Overloading Unary Operators


Example declaration as a non-member function
class String {
friend bool operator!( const
String & )
...
}

11
Overloading Binary Operators


Overloaded Binary operators
Non-static member function, one argument
 Example:


class Complex {
public:
const Complex operator+ (
const Complex &);
...
};

12
Overloading Binary Operators
Non-member function, two arguments
 Example:


class Complex {
friend Complex operator +(
const Complex &, const Complex &
);
...
};

13
Example: Operator Overloading
class OverloadingExample
{
private:
int m_LocalInt;
public:
OverloadingExample(int j) // default constructor

{
m_LocalInt = j;
}
int operator+ (int j) // overloaded + operator

{
return (m_LocalInt + j);
}
};
Example: Operator Overloading (contd.)
void main()
{
OverloadingExample object1(10);
cout << object1 + 10; // overloaded operator called
}
Types of Operator


Unary operator



Binary operator
Unary Operators


Operators attached to a single operand (-a, +a, -a, a--, ++a, a++)
Example: Unary Operators
class UnaryExample
{
private:
int m_LocalInt;
public:
UnaryExample(int j)

{
m_LocalInt = j;
}
int operator++ ()

{
return (m_LocalInt++);
}
};
Example: Unary Operators (contd.)
void main()
{
UnaryExample object1(10);
cout << object1++; // overloaded operator results in value
// 11
}
Unary Overloaded Operators -- Member Functions


Invocation in Two Ways -- Object@ (Direct) or Object.operator@() (As a
Function)
class number{
int n;
public:
number(int x = 0):n(x){};
number operator-(){return number (-n);}
};
main()
{
number a(1), b(2), c, d;
//Invocation of "-" Operator -- direct
d = -b; //d.n = -2
//Invocation of "-" Operator -- Function
c = a.operator-(); //c.n = -1
}
20
Binary Overloaded Operators -- Member Functions


Invocation in Two Ways -- ObjectA @ ObjectB (direct) or
ObjectA.operator@(ObjectB) (As a Function)
class number{
int n;
public:
number(int x = 0):n(x){};
number operator+(number ip)
{return number (ip.n + n);}
};
main()
{
number a(1), b(2), c, d;
//Invocation of "+" Operator -- direct
d = a + b; //d.n = 3
//Invocation of "+" Operator -- Function
c = d.operator+(b); //c.n = d.n + b.n = 5
}
21
Binary Operators


Operators attached to two operands (a-b, a+b,
a*b, a/b, a%b, a>b, a>=b, a<b, a<=b, a==b)
Example: Binary Operators
class BinaryExample
{
private:
int m_LocalInt;
public:
BinaryExample(int j)

{
m_LocalInt = j;
}
int operator+ (BinaryExample& rhsObj)

{
return (m_LocalInt + rhsObj.m_LocalInt);
}
};
Example: Binary Operators (contd.)
void main()
{
BinaryExample object1(10), object2(20);
cout << object1 + object2; // overloaded operator called
}
Non-Overloadable Operators


Operators that can not be overloaded due to
safety reasons:
Member Selection ‘.’ operator
 Member dereference ‘.*’ operator
 Exponential ‘**’ operator
 User-defined operators
 Operator precedence rules









Operator Overloading and Inheritance
An operator is overloaded in super class but
not overloaded in derived class is called nonmember operator in derived class
In above, if operator is also overloaded in
derived class it is called member-operator
= ( ) [ ] –> –>* operators must be member
operators
Other operators can be non-member
operators
Automatic Type Conversion




Automatic type conversion by the C++
compiler from the type that doesn’t fit, to the
type it wants
Two types of conversion:
Constructor conversion
 Operator conversion

Constructor Conversion




Constructor having a single argument of another
type, results in automatic type conversion by the
compiler
Prevention of constructor type conversion by
use of explicit keyword
Example: Constructor Conversion
class One
{
public:
One() {}
};
class Two
{
public:
Two(const One&) {}
};
void f(Two) {}
void main()
{
One one;
f(one); // Wants a Two, has a One
}
Operator Conversion








Create a member function that takes the current
type
Converts it to the desired type using the
operator keyword followed by the type you
want to convert to
Return type is the name of the operator
overloaded
Reflexivity - global overloading instead of
member overloading; for code saving
Example: Operator Conversion
class Three
{
int m_Data;
public:
Three(int ii = 0, int = 0) : m_Data(ii) {}
};
class Four
{
int m_Data;
public:
Four(int x) : m_Data(x) {}
operator Three() const
{
return Three(m_Data);
}
};
void g(Three) {}
Example: Operator Conversion (contd.)
void main()
{
Four four(1);
g(four);
g(1); // Calls Three(1,0)
}
Type Conversion Pitfalls


Compiler performs automatic type conversion
independently, therefore it may have the
following pitfalls:
Ambiguity with two classes of same type
 Automatic conversion to more than one type - fanout
 Adds hidden activities (copy-constructor etc)

Unit Summary






In this unit you have covered …
Operator overloading
Different types of operator
Operators that cannot be overloaded
Inheritance and overloading
Automatic type conversion

More Related Content

PPT
Abstract class in java
PPTX
Operators in java
PPTX
Classes, objects in JAVA
PPT
Operators in C++
PPTX
Static Data Members and Member Functions
PPTX
Storage class in C Language
PPTX
Identifiers
PPTX
Object oriented programming
Abstract class in java
Operators in java
Classes, objects in JAVA
Operators in C++
Static Data Members and Member Functions
Storage class in C Language
Identifiers
Object oriented programming

What's hot (20)

PPTX
Type casting
PPTX
Structure in C
PDF
Arrays in Java
PPTX
Encapsulation C++
PPTX
Java abstract class & abstract methods
PPTX
Object Oriented Programming Using C++
PPTX
OPERATOR OVERLOADING IN C++
PPTX
Access specifier
PPTX
Friend function
PPT
Strings
PDF
Operator overloading
PPTX
Object Oriented Programming Concepts for beginners
PPTX
C tokens
PPTX
This keyword in java
PPTX
Characteristics of OOPS
PPTX
Access specifiers(modifiers) in java
PPTX
Java program structure
PPTX
[OOP - Lec 19] Static Member Functions
PPTX
Introduction to Object Oriented Programming
PPTX
Methods in java
Type casting
Structure in C
Arrays in Java
Encapsulation C++
Java abstract class & abstract methods
Object Oriented Programming Using C++
OPERATOR OVERLOADING IN C++
Access specifier
Friend function
Strings
Operator overloading
Object Oriented Programming Concepts for beginners
C tokens
This keyword in java
Characteristics of OOPS
Access specifiers(modifiers) in java
Java program structure
[OOP - Lec 19] Static Member Functions
Introduction to Object Oriented Programming
Methods in java
Ad

Similar to Operator overloading (20)

PPTX
Operator overloaing
PPT
Operator overloading
PPTX
PPT
Lec 28 - operator overloading
PPT
Lec 26.27-operator overloading
PDF
Ch-4-Operator Overloading.pdf
PPTX
Operator overloading
PDF
Lec 8.pdf a
PDF
OOPS-Seminar.pdf
PPT
Polymorphism and function overloading_new.ppt
PPTX
Operator Overloading
PDF
Object Oriented Programming using C++ - Part 3
PPTX
Presentation on overloading
PPTX
Cpp (C++)
PDF
Operator Overloading in C++
PDF
Operator_Overloaing_Type_Conversion_OOPC(C++)
PPTX
Operator overloading (binary)
PDF
NIKUL SURANI
PPTX
Operator overloadng
Operator overloaing
Operator overloading
Lec 28 - operator overloading
Lec 26.27-operator overloading
Ch-4-Operator Overloading.pdf
Operator overloading
Lec 8.pdf a
OOPS-Seminar.pdf
Polymorphism and function overloading_new.ppt
Operator Overloading
Object Oriented Programming using C++ - Part 3
Presentation on overloading
Cpp (C++)
Operator Overloading in C++
Operator_Overloaing_Type_Conversion_OOPC(C++)
Operator overloading (binary)
NIKUL SURANI
Operator overloadng
Ad

More from Kumar (20)

PPT
Graphics devices
PPT
Fill area algorithms
PDF
region-filling
PDF
Bresenham derivation
PPT
Bresenham circles and polygons derication
PPTX
Introductionto xslt
PPTX
Extracting data from xml
PPTX
Xml basics
PPTX
XML Schema
PPTX
Publishing xml
PPTX
DTD
PPTX
Applying xml
PPTX
Introduction to XML
PDF
How to deploy a j2ee application
PDF
JNDI, JMS, JPA, XML
PDF
EJB Fundmentals
PDF
JSP and struts programming
PDF
java servlet and servlet programming
PDF
Introduction to JDBC and JDBC Drivers
PDF
Introduction to J2EE
Graphics devices
Fill area algorithms
region-filling
Bresenham derivation
Bresenham circles and polygons derication
Introductionto xslt
Extracting data from xml
Xml basics
XML Schema
Publishing xml
DTD
Applying xml
Introduction to XML
How to deploy a j2ee application
JNDI, JMS, JPA, XML
EJB Fundmentals
JSP and struts programming
java servlet and servlet programming
Introduction to JDBC and JDBC Drivers
Introduction to J2EE

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
KodekX | Application Modernization Development
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation theory and applications.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Approach and Philosophy of On baking technology
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Digital-Transformation-Roadmap-for-Companies.pptx
cuic standard and advanced reporting.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
“AI and Expert System Decision Support & Business Intelligence Systems”
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Building Integrated photovoltaic BIPV_UPV.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Unlocking AI with Model Context Protocol (MCP)
KodekX | Application Modernization Development
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation theory and applications.pdf
Understanding_Digital_Forensics_Presentation.pptx
A Presentation on Artificial Intelligence
Advanced methodologies resolving dimensionality complications for autism neur...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Approach and Philosophy of On baking technology

Operator overloading

  • 1. Unit - III Operator Overloading Customised behaviour of operators
  • 2. Unit Introduction This unit covers operator overloading
  • 3. Unit Objectives      After covering this unit you will understand… Operator overloading Different types of operator and their overloading Operators that cannot be overloaded Inheritance and overloading Automatic type conversion
  • 4. Introduction  Operator overloading     Enabling C++’s operators to work with class objects Using traditional operators with user-defined objects Requires great care; when overloading is misused, program difficult to understand Examples of already overloaded operators    4 Operator << is both the stream-insertion operator and the bitwise left-shift operator + and -, perform arithmetic on multiple types Compiler generates the appropriate code based on the manner in which the operator is used
  • 5.  Overloading an operator Write function definition as normal  Function name is keyword operator followed by the symbol for the operator being overloaded  operator+ used to overload the addition operator (+)   Using operators  To use an operator on a class object it must be overloaded unless the assignment operator(=)or the address operator(&) Assignment operator by default performs memberwise assignment  Address operator (&) by default returns the address of an object  5
  • 6. Restrictions on Operator Overloading  Operators that can be overloaded C++ operators that can be overloaded + * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- ->* , -> [] () new delete new[]  - delete[] C++ Operators that cannot be overloaded Operators that cannot be overloaded . 6 .* :: ?: sizeof
  • 7. Restrictions on Operator Overloading    7 Overloading restrictions  Precedence of an operator cannot be changed  Associativity of an operator cannot be changed  Arity (number of operands) cannot be changed  Unary operators remain unary, and binary operators remain binary  Operators &, *, + and - each have unary and binary versions  Unary and binary versions can be overloaded separately No new operators can be created  Use only existing operators No overloading operators for built-in types  Cannot change how two integers are added  Produces a syntax error
  • 8. Operator Functions as Class Members vs. as friend Functions    8 Member vs non-member  In general, operator functions can be member or non-member functions  When overloading ( ), [ ], -> or any of the assignment operators, must use a member function Operator functions as member functions  Leftmost operand must be an object (or reference to an object) of the class  If left operand of a different type, operator function must be a non-member function Operator functions as non-member functions  Must be friends if needs to access private or protected members  Enable the operator to be commutative
  • 9. Overloading Stream-Insertion and Stream-Extraction Operators  Overloaded << and >> operators Overloaded to perform input/output for userdefined types  Left operand of types ostream & and istream &  Must be a non-member function because left operand is not an object of the class  Must be a friend function to access private data members  9
  • 10. Overloading Unary Operators  Overloading unary operators Can be overloaded with no arguments or one argument  Should usually be implemented as member functions    Avoid friend functions and classes because they violate the encapsulation of a class Example declaration as a member function: class String { public: bool operator!() const; ... }; 10
  • 11. Overloading Unary Operators  Example declaration as a non-member function class String { friend bool operator!( const String & ) ... } 11
  • 12. Overloading Binary Operators  Overloaded Binary operators Non-static member function, one argument  Example:  class Complex { public: const Complex operator+ ( const Complex &); ... }; 12
  • 13. Overloading Binary Operators Non-member function, two arguments  Example:  class Complex { friend Complex operator +( const Complex &, const Complex & ); ... }; 13
  • 14. Example: Operator Overloading class OverloadingExample { private: int m_LocalInt; public: OverloadingExample(int j) // default constructor { m_LocalInt = j; } int operator+ (int j) // overloaded + operator { return (m_LocalInt + j); } };
  • 15. Example: Operator Overloading (contd.) void main() { OverloadingExample object1(10); cout << object1 + 10; // overloaded operator called }
  • 16. Types of Operator  Unary operator  Binary operator
  • 17. Unary Operators  Operators attached to a single operand (-a, +a, -a, a--, ++a, a++)
  • 18. Example: Unary Operators class UnaryExample { private: int m_LocalInt; public: UnaryExample(int j) { m_LocalInt = j; } int operator++ () { return (m_LocalInt++); } };
  • 19. Example: Unary Operators (contd.) void main() { UnaryExample object1(10); cout << object1++; // overloaded operator results in value // 11 }
  • 20. Unary Overloaded Operators -- Member Functions  Invocation in Two Ways -- Object@ (Direct) or Object.operator@() (As a Function) class number{ int n; public: number(int x = 0):n(x){}; number operator-(){return number (-n);} }; main() { number a(1), b(2), c, d; //Invocation of "-" Operator -- direct d = -b; //d.n = -2 //Invocation of "-" Operator -- Function c = a.operator-(); //c.n = -1 } 20
  • 21. Binary Overloaded Operators -- Member Functions  Invocation in Two Ways -- ObjectA @ ObjectB (direct) or ObjectA.operator@(ObjectB) (As a Function) class number{ int n; public: number(int x = 0):n(x){}; number operator+(number ip) {return number (ip.n + n);} }; main() { number a(1), b(2), c, d; //Invocation of "+" Operator -- direct d = a + b; //d.n = 3 //Invocation of "+" Operator -- Function c = d.operator+(b); //c.n = d.n + b.n = 5 } 21
  • 22. Binary Operators  Operators attached to two operands (a-b, a+b, a*b, a/b, a%b, a>b, a>=b, a<b, a<=b, a==b)
  • 23. Example: Binary Operators class BinaryExample { private: int m_LocalInt; public: BinaryExample(int j) { m_LocalInt = j; } int operator+ (BinaryExample& rhsObj) { return (m_LocalInt + rhsObj.m_LocalInt); } };
  • 24. Example: Binary Operators (contd.) void main() { BinaryExample object1(10), object2(20); cout << object1 + object2; // overloaded operator called }
  • 25. Non-Overloadable Operators  Operators that can not be overloaded due to safety reasons: Member Selection ‘.’ operator  Member dereference ‘.*’ operator  Exponential ‘**’ operator  User-defined operators  Operator precedence rules 
  • 26.     Operator Overloading and Inheritance An operator is overloaded in super class but not overloaded in derived class is called nonmember operator in derived class In above, if operator is also overloaded in derived class it is called member-operator = ( ) [ ] –> –>* operators must be member operators Other operators can be non-member operators
  • 27. Automatic Type Conversion   Automatic type conversion by the C++ compiler from the type that doesn’t fit, to the type it wants Two types of conversion: Constructor conversion  Operator conversion 
  • 28. Constructor Conversion   Constructor having a single argument of another type, results in automatic type conversion by the compiler Prevention of constructor type conversion by use of explicit keyword
  • 29. Example: Constructor Conversion class One { public: One() {} }; class Two { public: Two(const One&) {} }; void f(Two) {} void main() { One one; f(one); // Wants a Two, has a One }
  • 30. Operator Conversion     Create a member function that takes the current type Converts it to the desired type using the operator keyword followed by the type you want to convert to Return type is the name of the operator overloaded Reflexivity - global overloading instead of member overloading; for code saving
  • 31. Example: Operator Conversion class Three { int m_Data; public: Three(int ii = 0, int = 0) : m_Data(ii) {} }; class Four { int m_Data; public: Four(int x) : m_Data(x) {} operator Three() const { return Three(m_Data); } }; void g(Three) {}
  • 32. Example: Operator Conversion (contd.) void main() { Four four(1); g(four); g(1); // Calls Three(1,0) }
  • 33. Type Conversion Pitfalls  Compiler performs automatic type conversion independently, therefore it may have the following pitfalls: Ambiguity with two classes of same type  Automatic conversion to more than one type - fanout  Adds hidden activities (copy-constructor etc) 
  • 34. Unit Summary      In this unit you have covered … Operator overloading Different types of operator Operators that cannot be overloaded Inheritance and overloading Automatic type conversion