Operator Overloading: Extending Functionality of Mathematical Classes in C++, Slides of Computer Science

Operator overloading is a feature in c++ that allows extending the functionality of mathematical classes by making operators class-specific. It enables programmers to write more readable and efficient code, especially for mathematical operations. The concept of operator overloading, its benefits, requirements, forms, and restrictions.

Typology: Slides

2012/2013

Uploaded on 03/21/2013

dharmaraaj
dharmaraaj 🇮🇳

4.4

(68)

145 documents

1 / 13

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Operator Overloading
Member Functions
Docsity.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Partial preview of the text

Download Operator Overloading: Extending Functionality of Mathematical Classes in C++ and more Slides Computer Science in PDF only on Docsity!

Operator Overloading

Member Functions

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@ is Used as the Function Name
  • 40 Operators can be Overloaded to Give Class-Specific Functionality

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

Forms of Overloaded Operators

  • Member Functions
  • Friend Functions
  • Free-Standing or Global Functions

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. <<, >> operators

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 << 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.

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

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

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 }