Operator Overloading Member Functions - PowerPoint PPT Presentation

1 / 14
About This Presentation
Title:

Operator Overloading Member Functions

Description:

Department of Computer and Information Science, School of Science, IUPUI Operator Overloading Member Functions Dale Roberts, Lecturer Computer Science, IUPUI – PowerPoint PPT presentation

Number of Views:19
Avg rating:3.0/5.0
Slides: 15
Provided by: wallyCsI2
Category:

less

Transcript and Presenter's Notes

Title: Operator Overloading Member Functions


1
Operator Overloading
Member Functions
Department of Computer and Information
Science,School of Science, IUPUI
Dale Roberts, Lecturer Computer Science,
IUPUI E-mail droberts_at_cs.iupui.edu
2
Operator Overloading
  • Function-call notation is cumbersome for certain
    kinds of classes, especially mathematical classes
  • Allows extendable design
  • Most appropriate for math classes. eg. Matrix,
    Vector, etc.
  • Gives Operators Class-Specific Functionality
  • In-built or Standard Overloading for Basic
    Numerical Data Types -- can be used with int,
    float, doubles
  • Analogous to Function Overloading -- operator_at_ is
    Used as the Function Name
  • 40 Operators can be Overloaded to Give
    Class-Specific Functionality

3
Operator Overloading (Cont)
C enables programmers to overload operators to
be sensitive to the context in which they are
used.  The compiler generates appropriate code
Easier to read
4
Requirements of Overloaded Operators
  • Their Meaning Should be Intuitive -- Should
    Mean Addition
  • When Appropriate, they Should be Associative -- a
    b Should Result in an Object, c of the Same
    Class
  • If these Conditions are Not Satisfied then it is
    Better to Use Member Functions and Not Operator
    Overloading
  • To use an operator on class objects, that
    operator must be overloaded - with two exceptions
    - the assignment operator (), which performs a
    member wise copy, and the address () operator

5
Forms of Overloaded Operators
  • Member Functions
  • Friend Functions
  • Free-Standing or Global Functions

6
Operator Functions
  • When to make class members, friends or global
    functions?
  • If member function, then this is implicitly
    available for one of the arguments
  • When overloading ( ), , -gt, or , the operator
    overloading function must be declared as a class
    member.  For other operators, the overloading
    functions can be non-members

7
Operator Functions (Cont)
  • When an operator function is implemented as a
    member function, the left most (or only in the
    case of unary operators) operand must be a class
    object (or a reference to a class object) of
    operator's class
  • If the left operand must be an object of a
    different class or a built-in type, this operator
    must be implemented as a non-class member. eg.
    ltlt, gtgt operators

8
Operator Functions (cont)
  • An operator function implemented as a non-member
    must be a friend if it needs to access non-public
    data members of that class.
  • The overloaded ltlt operator must have a left
    operand of type ostream.  Therefore, it must be a
    non-member function.  Also, it may require access
    to the private data members of the class.  Thus,
    it needs to be a friend function for that class.

9
Operator Functions (Cont)
  • Similar observation holds for gtgt operator which
    has a left operand of type istream.
  • Operator member functions are classed only when
    the left operand of a binary operator is
    specifically an object of that class or when the
    single operand of a unary operator is an object
    of that class.
  • If the operator needs to be commutative (a b
    b a), then making it a non-member function is
    necessary.

10
Restrictions of Overloaded Operators
  • New Operators CANNOT be Created
  • Fundamental Data Types (e.g. int) CANNOT be
    Overloaded
  • Operator Priority CANNOT be Changed
  • Operator Associativity CANNOT be Changed
  • The arity of CANNOT be changed -- can Take ONLY
    TWO Arguments (there is no unary )
  • Two Separate Overloaded Functions (With Different
    Signatures) can be Created for Operators Which
    Exist in Pre-fix and Post-fix Form --

11
Restrictions of Overloaded Operators (Cont)
  • Overloaded Operators are NOT IMPLICITLY
    Associative or Commutative, Even if the Original
    Operators were Associative or Commutative --
    Associativity and Commutativity must be
    explicitly implemented. For Associativity this
    means returning an instance of the class.
  • Overloading the operator does not automatically
    overload related operators (, , etc).  If
    needed, these related operators must be
    explicitly overloaded

12
Unary Overloaded Operators -- Member Functions
  • Invocation in Two Ways -- Object_at_ (Direct) or
    Object.operator_at_() (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

13
Binary Overloaded Operators -- Member Functions
  • Invocation in Two Ways -- ObjectA _at_ ObjectB
    (direct) or ObjectA.operator_at_(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

14
Acknowledgements
  • These slides were originally development by Dr.
    Uday Murthy and Dr. Rajeev Raje.
  • Some contents comes from the Deitel slides that
    accompany your text.
  • Some information regarding the postfix form the
    increment and decrement operators comes from MSDN.
Write a Comment
User Comments (0)
About PowerShow.com