SlideShare a Scribd company logo
1 of 34
Operator Overloading
Customised behaviour of operators
Unit - III
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
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
 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
6
Restrictions on Operator Overloading
 ++ operators that can be overloaded
 C++ Operators that cannot be overloaded
Operators that cannot be overloaded
. .* :: ?: sizeof
COperators that can be overloaded
+ - * / % ^ & |
~ ! = < > += -= *=
/= %= ^= &= |= << >> >>=
<<= == != <= >= && || ++
-- ->* , -> [] () new delete
new[] delete[]
7
Restrictions on Operator Overloading
 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 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
8
9
Overloading Stream-Insertion and Stream-Extraction
Operators
 Overloaded << and >> operators
 Overloaded to perform input/output for user-
defined 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
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;
...
};
11
Overloading Unary Operators
 Example declaration as a non-member function
class String {
friend bool operator!( const
String & )
...
}
12
Overloading Binary Operators
 Overloaded Binary operators
 Non-static member function, one argument
 Example:
class Complex {
public:
const Complex operator+ (
const Complex &);
...
};
13
Overloading Binary Operators
 Non-member function, two arguments
 Example:
class Complex {
friend Complex operator +(
const Complex &, const Complex &
);
...
};
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
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
}
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 non-
member 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 - fan-
out
 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

What's hot

08 c++ Operator Overloading.ppt
08 c++ Operator Overloading.ppt08 c++ Operator Overloading.ppt
08 c++ Operator Overloading.ppt
Tareq Hasan
 
Presentation on overloading
Presentation on overloading Presentation on overloading
Presentation on overloading
Charndeep Sekhon
 
Lec 28 - operator overloading
Lec 28 - operator overloadingLec 28 - operator overloading
Lec 28 - operator overloading
Princess Sam
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
farhan amjad
 
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
Hadziq Fabroyir
 

What's hot (20)

operator overloading in C++
operator overloading in C++operator overloading in C++
operator overloading in C++
 
08 c++ Operator Overloading.ppt
08 c++ Operator Overloading.ppt08 c++ Operator Overloading.ppt
08 c++ Operator Overloading.ppt
 
C++ overloading
C++ overloadingC++ overloading
C++ overloading
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
Operator overloading and type conversion in cpp
Operator overloading and type conversion in cppOperator overloading and type conversion in cpp
Operator overloading and type conversion in cpp
 
Operator Overloading and Scope of Variable
Operator Overloading and Scope of VariableOperator Overloading and Scope of Variable
Operator Overloading and Scope of Variable
 
14 operator overloading
14 operator overloading14 operator overloading
14 operator overloading
 
Operator overloading and type conversions
Operator overloading and type conversionsOperator overloading and type conversions
Operator overloading and type conversions
 
Bca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloadingBca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloading
 
Presentation on overloading
Presentation on overloading Presentation on overloading
Presentation on overloading
 
Operator Overloading
Operator OverloadingOperator Overloading
Operator Overloading
 
operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++
 
operator overloading
operator overloadingoperator overloading
operator overloading
 
c++
c++c++
c++
 
Lec 28 - operator overloading
Lec 28 - operator overloadingLec 28 - operator overloading
Lec 28 - operator overloading
 
Unary operator overloading
Unary operator overloadingUnary operator overloading
Unary operator overloading
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
 
C cpluplus 2
C cpluplus 2C cpluplus 2
C cpluplus 2
 
Oops
OopsOops
Oops
 

Similar to Operator overloaing

08 c-operator-overloadingppt2563
08 c-operator-overloadingppt256308 c-operator-overloadingppt2563
08 c-operator-overloadingppt2563
Youth For Peace
 

Similar to Operator overloaing (20)

Ch-4-Operator Overloading.pdf
Ch-4-Operator Overloading.pdfCh-4-Operator Overloading.pdf
Ch-4-Operator Overloading.pdf
 
OOPS-Seminar.pdf
OOPS-Seminar.pdfOOPS-Seminar.pdf
OOPS-Seminar.pdf
 
Operator Overloading
Operator OverloadingOperator Overloading
Operator Overloading
 
Cpp (C++)
Cpp (C++)Cpp (C++)
Cpp (C++)
 
NIKUL SURANI
NIKUL SURANINIKUL SURANI
NIKUL SURANI
 
Operator_Overloaing_Type_Conversion_OOPC(C++)
Operator_Overloaing_Type_Conversion_OOPC(C++)Operator_Overloaing_Type_Conversion_OOPC(C++)
Operator_Overloaing_Type_Conversion_OOPC(C++)
 
Operator overloading (binary)
Operator overloading (binary)Operator overloading (binary)
Operator overloading (binary)
 
Object Oriented Programming using C++ - Part 3
Object Oriented Programming using C++ - Part 3Object Oriented Programming using C++ - Part 3
Object Oriented Programming using C++ - Part 3
 
Operator Overloading in C++
Operator Overloading in C++Operator Overloading in C++
Operator Overloading in C++
 
3d7b7 session4 c++
3d7b7 session4 c++3d7b7 session4 c++
3d7b7 session4 c++
 
OOP_UnitIII.pdf
OOP_UnitIII.pdfOOP_UnitIII.pdf
OOP_UnitIII.pdf
 
Overloading
OverloadingOverloading
Overloading
 
08 c-operator-overloadingppt2563
08 c-operator-overloadingppt256308 c-operator-overloadingppt2563
08 c-operator-overloadingppt2563
 
Mca 2nd sem u-4 operator overloading
Mca 2nd  sem u-4 operator overloadingMca 2nd  sem u-4 operator overloading
Mca 2nd sem u-4 operator overloading
 
Synapse india complain sharing info on chapter 8 operator overloading
Synapse india complain sharing info on chapter 8   operator overloadingSynapse india complain sharing info on chapter 8   operator overloading
Synapse india complain sharing info on chapter 8 operator overloading
 
Operator overloading C++
Operator overloading C++Operator overloading C++
Operator overloading C++
 
Unary operator overloading
Unary operator overloadingUnary operator overloading
Unary operator overloading
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
Unit ii
Unit iiUnit ii
Unit ii
 
Operator overloading in C++
Operator  overloading in C++Operator  overloading in C++
Operator overloading in C++
 

More from zindadili (20)

Namespaces
NamespacesNamespaces
Namespaces
 
Namespace1
Namespace1Namespace1
Namespace1
 
Exception handling
Exception handlingException handling
Exception handling
 
Exception handling
Exception handlingException handling
Exception handling
 
Templates2
Templates2Templates2
Templates2
 
Templates1
Templates1Templates1
Templates1
 
Virtual function
Virtual functionVirtual function
Virtual function
 
Operator overloading2
Operator overloading2Operator overloading2
Operator overloading2
 
Polymorphism
PolymorphismPolymorphism
Polymorphism
 
Function overloading
Function overloadingFunction overloading
Function overloading
 
Aggregation
AggregationAggregation
Aggregation
 
Hierarchical inheritance
Hierarchical inheritanceHierarchical inheritance
Hierarchical inheritance
 
Hybrid inheritance
Hybrid inheritanceHybrid inheritance
Hybrid inheritance
 
Multiple inheritance
Multiple inheritanceMultiple inheritance
Multiple inheritance
 
Abstraction1
Abstraction1Abstraction1
Abstraction1
 
Abstraction
AbstractionAbstraction
Abstraction
 
Access specifier
Access specifierAccess specifier
Access specifier
 
Inheritance
InheritanceInheritance
Inheritance
 
Friend function
Friend functionFriend function
Friend function
 
Enum
EnumEnum
Enum
 

Recently uploaded

Neurulation and the formation of the neural tube
Neurulation and the formation of the neural tubeNeurulation and the formation of the neural tube
Neurulation and the formation of the neural tube
SaadHumayun7
 
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
中 央社
 
IATP How-to Foreign Travel May 2024.pdff
IATP How-to Foreign Travel May 2024.pdffIATP How-to Foreign Travel May 2024.pdff
IATP How-to Foreign Travel May 2024.pdff
17thcssbs2
 

Recently uploaded (20)

B.ed spl. HI pdusu exam paper-2023-24.pdf
B.ed spl. HI pdusu exam paper-2023-24.pdfB.ed spl. HI pdusu exam paper-2023-24.pdf
B.ed spl. HI pdusu exam paper-2023-24.pdf
 
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdfDanh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
 
An Overview of the Odoo 17 Discuss App.pptx
An Overview of the Odoo 17 Discuss App.pptxAn Overview of the Odoo 17 Discuss App.pptx
An Overview of the Odoo 17 Discuss App.pptx
 
“O BEIJO” EM ARTE .
“O BEIJO” EM ARTE                       .“O BEIJO” EM ARTE                       .
“O BEIJO” EM ARTE .
 
2024_Student Session 2_ Set Plan Preparation.pptx
2024_Student Session 2_ Set Plan Preparation.pptx2024_Student Session 2_ Set Plan Preparation.pptx
2024_Student Session 2_ Set Plan Preparation.pptx
 
How to the fix Attribute Error in odoo 17
How to the fix Attribute Error in odoo 17How to the fix Attribute Error in odoo 17
How to the fix Attribute Error in odoo 17
 
Morse OER Some Benefits and Challenges.pptx
Morse OER Some Benefits and Challenges.pptxMorse OER Some Benefits and Challenges.pptx
Morse OER Some Benefits and Challenges.pptx
 
Neurulation and the formation of the neural tube
Neurulation and the formation of the neural tubeNeurulation and the formation of the neural tube
Neurulation and the formation of the neural tube
 
Matatag-Curriculum and the 21st Century Skills Presentation.pptx
Matatag-Curriculum and the 21st Century Skills Presentation.pptxMatatag-Curriculum and the 21st Century Skills Presentation.pptx
Matatag-Curriculum and the 21st Century Skills Presentation.pptx
 
Application of Matrices in real life. Presentation on application of matrices
Application of Matrices in real life. Presentation on application of matricesApplication of Matrices in real life. Presentation on application of matrices
Application of Matrices in real life. Presentation on application of matrices
 
MichaelStarkes_UncutGemsProjectSummary.pdf
MichaelStarkes_UncutGemsProjectSummary.pdfMichaelStarkes_UncutGemsProjectSummary.pdf
MichaelStarkes_UncutGemsProjectSummary.pdf
 
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文會考英文
 
Mbaye_Astou.Education Civica_Human Rights.pptx
Mbaye_Astou.Education Civica_Human Rights.pptxMbaye_Astou.Education Civica_Human Rights.pptx
Mbaye_Astou.Education Civica_Human Rights.pptx
 
Operations Management - Book1.p - Dr. Abdulfatah A. Salem
Operations Management - Book1.p  - Dr. Abdulfatah A. SalemOperations Management - Book1.p  - Dr. Abdulfatah A. Salem
Operations Management - Book1.p - Dr. Abdulfatah A. Salem
 
slides CapTechTalks Webinar May 2024 Alexander Perry.pptx
slides CapTechTalks Webinar May 2024 Alexander Perry.pptxslides CapTechTalks Webinar May 2024 Alexander Perry.pptx
slides CapTechTalks Webinar May 2024 Alexander Perry.pptx
 
IATP How-to Foreign Travel May 2024.pdff
IATP How-to Foreign Travel May 2024.pdffIATP How-to Foreign Travel May 2024.pdff
IATP How-to Foreign Travel May 2024.pdff
 
Word Stress rules esl .pptx
Word Stress rules esl               .pptxWord Stress rules esl               .pptx
Word Stress rules esl .pptx
 
Pragya Champions Chalice 2024 Prelims & Finals Q/A set, General Quiz
Pragya Champions Chalice 2024 Prelims & Finals Q/A set, General QuizPragya Champions Chalice 2024 Prelims & Finals Q/A set, General Quiz
Pragya Champions Chalice 2024 Prelims & Finals Q/A set, General Quiz
 
philosophy and it's principles based on the life
philosophy and it's principles based on the lifephilosophy and it's principles based on the life
philosophy and it's principles based on the life
 
INU_CAPSTONEDESIGN_비밀번호486_업로드용 발표자료.pdf
INU_CAPSTONEDESIGN_비밀번호486_업로드용 발표자료.pdfINU_CAPSTONEDESIGN_비밀번호486_업로드용 발표자료.pdf
INU_CAPSTONEDESIGN_비밀번호486_업로드용 발표자료.pdf
 

Operator overloaing

  • 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. 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  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. 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
  • 6. 6 Restrictions on Operator Overloading  ++ operators that can be overloaded  C++ Operators that cannot be overloaded Operators that cannot be overloaded . .* :: ?: sizeof COperators that can be overloaded + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- ->* , -> [] () new delete new[] delete[]
  • 7. 7 Restrictions on Operator Overloading  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 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 8
  • 9. 9 Overloading Stream-Insertion and Stream-Extraction Operators  Overloaded << and >> operators  Overloaded to perform input/output for user- defined 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
  • 10. 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; ... };
  • 11. 11 Overloading Unary Operators  Example declaration as a non-member function class String { friend bool operator!( const String & ) ... }
  • 12. 12 Overloading Binary Operators  Overloaded Binary operators  Non-static member function, one argument  Example: class Complex { public: const Complex operator+ ( const Complex &); ... };
  • 13. 13 Overloading Binary Operators  Non-member function, two arguments  Example: class Complex { friend Complex operator +( const Complex &, const Complex & ); ... };
  • 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. 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 }
  • 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 non- member 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 - fan- out  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