Prepared By:
Prof. Nishat Shaikh
Dr. Aayushi Chaudhari
CEUC102
OBJECT ORIENTED PROGRAMMING
WITH C++
UNIT-5
POLYMORPHISM, OVERLOADING, AND
SMART POINTERS
Topics to be covered
2
5.1 Introduction to Polymorphism
5.2 Function overloading
5.3 overloading unary and binary operators and type conversion
5.4 Relationships among Objects in an Inheritance Hierarchy
5.5 Virtual Functions and Virtual Destructors
5.6 Abstract Classes and Pure virtual Functions
5.7 Runtime Polymorphism and Compile-Time Polymorphism
5.8 Operator Overloading Fundamentals
5.9 Dynamic Memory Management with new and delete
5.10 Resource acquisition is initialization (RAII) and Smart Pointers
5.11 Three-Way Comparison Operator(< = >)
5.12 Converting Between Types
5.13 Explicit Constructors and Conversion Operators
5.14 Overloading the Function Call Operator ()
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Introduction to Polymorphism
3
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Introduction to Polymorphism
4
 Polymorphism means more than one form. That
is, the same entity (function or operator) behaves
differently in different scenarios.
Compile time polymorphism / Static Binding /
Early Binding
 binding is occuring at compile time
 Inheritance is not involved
Run time polymorphism / Dynamic Binding / late
Binding
 at run time we came to know which method is going to invoke
 Inheritance is not involved
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Introduction to Polymorphism
5
Function overloading:
 Two or more functions having the same name but
different parameters [Refer Unit-2]
Operator overloading:
 It is a compile-time polymorphism in which the
operator is overloaded to provide the special
meaning to the user-defined data type
 In other words, giving the C++ operators such as +,
*, == additional meanings when they are applied
with user-defined data types.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Introduction to Polymorphism
6
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Introduction to Polymorphism
7
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Any symbol can be used as function name
 If it is a valid operator in C language
 If it is preceded by operator keyword
We can overload all the C++ operators except the
following:
 Scope resolution operator (::)
 Size operator(sizeof)
 member selection (.)
 member selection with pointer-to-member(.*)
 Ternary/conditional operator(?:)
Introduction to Polymorphism
8
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Defining Operator Overloading
 The general form of an operator function is:
NOTE:
Operator functions must be either member functions(non-
static) or friend functions.
 Friend function will have only one argument for
unary operators and two for binary operators.
 Member function has no argument for unary
operators and only one for binary operators.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Defining Operator Overloading
Example
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Defining Operator Overloading
The process of overloading involves the following
steps:
1. Creates a class that defines the data type that is to be
used in the overloading operation.
2. Declare the operator function operator op() in the
public part of the class.
3. It may be either a member function or a friend function.
4. Define the operator function to implement the
required operations.
NOTE:
 When an operator is overloaded , its original meaning
is not lost. Eg: the operator +, which has been
overloaded to add two vectors, can still be used to add
two integers.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Revision
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators
Prepared By: Nishat Shaikh
 Binary operators work on two operands.
 When we overload the binary operator for user-
defined types,
 The operator function is called using the obj1
object and obj2 is passed as an argument to the
function
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators: Ex-1(Addition)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators: Ex-2(Addition)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators
NOTE:
 In Overloading Binary Operators, the left-hand
operand is used to invoke the operator function and
the right-hand operand is passed as an argument.
 We can avoid the creation of the temp object by
replacing the entire function body by:
 When the compiler comes across a class name with
argument list, it invokes an appropriate
constructor, initializes an object with no name and
returns the contents for copying into an object.
 Such an object is called a temporary object and
goes out of scope as soon as the contents are
assigned to another object
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
Define a class NUM having two integer members a
and b. A class has member functions for input and
output. Overload the operators – and = = such that it
supports the following statements:
NUM N1, N2, N3;
N3=N1-N2;
if(N1==N2){...}
Use the concept of Overloading Binary Operators.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Binary Operators
Create a class String having character array. Class
includes constructor and required member functions
to get and display the object. Overload the following
operators for the class.
+(s3=s1+s2)
==(s1<s2)
+=(s1+=s2)
Use the concept of Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Binary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators Using Friend
 As stated earlier, friend functions may be used in
the place of member functions for overloading a
binary operator.
 The only difference is friend function requires two
arguments to be explicitly passed to it, while a
member function requires only one.
 There are certain situations where we would like to
use a friend function rather than a member function.
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Binary Operators Using Friend
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Prepared By: Nishat Shaikh
Practical : Overloading Binary Operators
Using Friend
Create a class Measure having members: meter and
cm. The class has get( ) and put( ) functions.
Overload operator + and – such that they support
M1=M2+15 and M3=M1 – 4.5. Also overload + and –
such that they support M1=5.0+M2 and M3=2.0 – M4.
Write a main( ) to test the class.
Use the concept of Overloading Binary Operators
with friend function.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Prepared By: Nishat Shaikh
Practical : Overloading Binary Operators
Using Friend
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Prepared By: Nishat Shaikh
Practical : Overloading Binary Operators
Using Friend
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators
 Unary operators operate on only one operand.
Examples of unary operators
 The Unary Minus(-)
 increment operator(++)
 decrement operator(--)
 logical NOT(!)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators:Ex-1(Unary Minus)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators:Ex-2(Unary Minus)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators:Ex-3(Increment)
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Unary Operators
Prepared By: Nishat Shaikh
Create a class Number having int num as member.
The class has input and output functions. Overload
unary operator (++) such that it supports N1=N2++
and N3=++N1 and Overload unary (-) such that it
supports N3 = - N3. Also define default,
parameterized and copy constructor for the class.
Also explain use of nameless object in operator
overloading.
Use the concept of Overloading Unary Operators.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Unary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Overloading Unary Operators
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators Using Friend
Prepared By: Nishat Shaikh
 As stated earlier, friend functions may be used in
the place of member functions for overloading a
Unary operator.
 The only difference is friend function requires one
arguments to be explicitly passed to it, while a
member function requires none.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators Using Friend:Ex-1
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading Unary Operators Using Friend:Ex-2
Prepared By: Nishat Shaikh
NOTE: If we pass argument by value, it will not work
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Overloading Unary Operators
Using Friend
Prepared By: Nishat Shaikh
Create a class complex having data members int
real , img and member function to print data.
Overload Unary operator (-) using friend function
such that it supports – C1 where C1 is the object of
class complex. Also define default, parameterized
and copy constructor for the class.
Use the concept of Overloading Unary Operators
with friend function.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Prepared By: Nishat Shaikh
Practical : Overloading Unary Operators
Using Friend
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Prepared By: Nishat Shaikh
Practical : Overloading Unary Operators
Using Friend
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Rules for Overloading Operators
Prepared By: Nishat Shaikh
There are certain restrictions and limitation in overloading
the operators Some of them are listed below:
1. Only existing operaators can be overloaded New operators
cannot be overloaded/created.
2. The overloaded operator must have at least one operand
that is of user defined type
3. We cannot change the basic meaning of an operator That
is to say, We cannot redefine the plus(+) operator to subtract
one value from the other
4. Overloaded operators follow the syntax rules of the original
operators They cannot be overridden
5. There are some operators that cannot be overloaded
( sizeof, . , .*, :: , ?: )
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Rules for Overloading Operators
Prepared By: Nishat Shaikh
6. We cannot use friend functions to overload certain operators(=, (
), [ ], ->) However, member function can be used to overload them
7. Unary operators, overloaded by means of a member function,
take no explicit arguments and return no explicit values, but, those
overloaded by means of a friend function, take one reference
argument (the object of the relevant class)
8. Binary operators overloaded through a member function take
one explicit argument and those which are overloaded through a
friend function take two explicit arguments
9. When using binary operators overloaded through a member
function, the left hand operand must be an object of the relevant
class
10. Binary arithmetic operators such as +, -, * and / must explicitly
return a value They must not attempt to change their own
arguments
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Type Conversions
Prepared By: Nishat Shaikh
 When different types of constants and variables are
used in expression, C automatically perform type
conversion based on some fixed rules
 In assignment operation, variable at the right hand side
is automatically converted to the type of the variable on
the left
 But this automated type promotion will work well if both
data types are of primary data type or both are of
same user defined data type
 But it will create problem when one data type is user
defined data type and another is primary data type or
they belong to two different classes.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Type Conversions
Prepared By: Nishat Shaikh
 So for that we have to use some special function for
type conversion as in such cases automatic type
conversion can not be performed by the language itself
There are three types of type conversion possible
1. Conversion from basic type to the class type
 Using Constructor
2. Conversion from class type to basic type
 Using Casting Operator Function
3. Conversion from one class to another class type
 Using Constructor
 Using Casting Operator Function
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
1. Conversion from basic type to the class pe
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
1. Conversion from basic type to the class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
Create a class Money having integer rupee, paisa as
data. Define appropriate functions to enter and display
data. Also define function that supports the statement:
obj1=115. Here obj1 is object of class and 115 is integer
that represents paisa. After execution of the statement
obj1 will be 1 rupee 15 paisa.
Use the concept of Type conversion from basic type to
class type.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
1. Conversion from basic type to the class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
1. Conversion from basic type to the class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
NOTE:
The constructors used for the type conversion take a
single argument whose type is to be converted.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
2. Conversion from class type to basic type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
The general form of an overloaded casting
operator function / conversion function:
The casting operator function should satisfy
following conditions:
 It must be a class member
 It must not specify a return type
 It must not have any arguments
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
2. Conversion from class type to basic type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Type conversion
Prepared By: Nishat Shaikh
Create a class Celsius with float. Define appropriate
member functions such that it support the statements:
C1=30.5F; float temperature; temperature=C2;
Use the concept of Type conversion from basic type
to class type and class type to basic type.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Type conversion
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
i1
b
a
3 4
p1
n
m
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading
Define a class KG having data member float kg and class
POUND having data member float lb. Both the classes
have default constructor and member functions to get
and show data. (1 kg = 2.20462 lb). Define appropriate
member functions such that they support the statements
in main( ):
KG K; POUND P; P=K;
Use the concepts of Type conversion from class type to
class type. Write this Program in two ways. Define
appropriate member function in class KG. Define
appropriate member function in class POUND.
Pounds=Kilograms * 2.20462262184878
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
3. Conversion from one class to another class type
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Type conversion
Prepared By: Nishat Shaikh
Create classes Celsius and Fahrenheit with float.
Define appropriate member functions such that they
support the statements in main( ): Celsius C1, C2=5.0;
Fahrenheit F1, F2; F1=C2; C1=F2;Use the concepts
of Type conversion from class type to class type.
Write this Program in two ways. Define appropriate
member function in class Celsius. Define appropriate
member function in class Fahrenheit.
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Type conversion
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Type conversion
Prepared By: Nishat Shaikh
Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
 There is a necessity to use the single pointer to
refer to all the objects of the different classes.
 So, we create the pointer to the base class that
refers to all the derived objects.
 But, when base class pointer contains the
address of the derived class object, always
executes the base class function.
 This issue can only be resolved by using the
'virtual' function.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
 Virtual function is a member function in the base class
that you redefine in a derived class. It is declared using
the virtual keyword.
 A 'virtual' is a keyword preceding the normal
declaration of a function.
 It is used to tell the compiler to perform dynamic
linkage or late binding on the function.
 When the function is made virtual, C++ determines
which function is to be invoked at the runtime based
on the type of the object pointed by the base class
pointer and not by the type of the pointer.
 In late binding function call is resolved during runtime.
Therefore compiler determines the type of object at
runtime, and then binds the function call.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
NOTE:
 Run time polymorphism is achieved only when a
virtual function is accessed through a pointer to the
base class.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Rules of Virtual Function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
1. Virtual functions must be members of some class.
2. Virtual functions cannot be static members.
3. They are accessed through object pointers.
4. They can be a friend of another class.
5. A virtual function must be defined in the base
class, even though it is not used.
6. The prototypes of a virtual function of the base
class and all the derived classes must be identical.
If the two functions with the same name but
different prototypes, C++ will consider them as the
overloaded functions and the virtual function
mechanism is ignored
7. We cannot have a virtual constructor, but we can
have a virtual destructor
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Rules of Virtual Function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
8. While a base pointer can point to any type of the
derived object, the reverse is not true. That is to
say, we can not use a pointer to a derived class to
access an object of base type
9. When a base pointer points to a derived class,
incrementing or decrementing it will not make
it to point to the next object of the derived
class. It is incremented or decremented only
relative to it’s base type. Therefore, we should not
use this method to move the pointer to the next
object.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
Create a class Media that stores the title (a string) and price
(float). Class Media has two argument constructor which
initializes data members of class Media. Also declare a virtual
function display () in Class Media. From the class Media derive
two classes: Class book, which contains data member page
count (int): and Class tape, which contains data member
playing time in minutes (float). Both Class book and Class
tape should have a constructor which initializes base class
constructor as well as its own data members and display ( )
function which displays book details and tape details
respectively. Write a main ( ) to test book and tape classes by
creating instances of them, asking the user to fill data and
displaying them.
Use the concept of Virtual function and Constructor in
Derived Class. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Size of Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Size of Virtual function
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
 It is normal practice to declare a function virtual
inside the base class and redefine it in the derived
classes.
 Such function inside base class is not used for
performing any task, it only serves as a
placeholder.
 For ex, display() function in class Media in previous
example. Such functions are called “do-nothing”
functions.
 A “do-nothing” function may be defined as follows:
 Such functions are called pure virtual functions
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
 A pure virtual function is a function declared in a
base class that has no definition relative to the
base class.
 In such case compiler requires each derived class
to either define the function or redeclare it as a
pure virtual function.
 Class containing pure virtual functions cannot be
used to declare any objects of its own and such
classes are called abstract base classes
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
NOTE:
1. A class is abstract if it has at least one pure
virtual function.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
2. We can have pointers and references of
abstract class type.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
3. If we do not override the pure virtual function in
derived class, then derived class also becomes
abstract class.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
4. An abstract class can have constructors.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions
Create an Abstract class vehicle having average as data
and pure virtual function getdata() and putdata(). Derive
class car and truck from class vehicle having data
members: fuel type (petrol, diesel, CNG) and no of
wheels respectively. Write a main ( ) that enters the data
of two cars and a truck and display the details of them.
Use the concept of Abstract Base class and Pure Virtual
functions.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical :Abstract class & Pure Virtual Functions
Prepared By: Nishat Shaikh
Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Dynamic Memory Management Operators
85
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ We use dynamic allocation techniques when it is not
known in advance how much of memory space is
needed
⮚ C uses malloc() and calloc() functions to allocate
memory dynamically at run time. Similarly, it uses the
function free() to free dynamically allocated memory.
⮚ Although C++ supports these functions, it also defines
two unary operators new and delete that perform the
task of allocating and freeing the memory in a better
and easier way.
⮚ Since these operators manipulate memory on the free
store, they are also known as free store operators .
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Dynamic Memory Management Operators
86
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ An object can be created by using new, and destroyed
by using delete, as and when required.
⮚ A data object created inside a block with new , will
remain in existence until it is explicitly destroyed by
using delete.
⮚ Thus, the Lifetime of an object is directly under our
control and is unrelated to the block structure of the
program.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
new operator
87
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ The new operator can be used to create objects of any
type:
⮚ Alternatively, we can combine the declaration of
pointers and their assignments as follows:
⮚ Following statement assign 25 to the newly created int
object:
⮚ We can also initialize the memory using the new
operator
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
new operator
88
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ The general form for a one-dimensional array is:
⮚ When creating multi-dimensional arrays with new, all
the array sizes must be supplied.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
new operator
89
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ if sufficient memory is not available for allocation, new
returns a null pointer
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
delete operator
90
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
⮚ When a data object is no longer needed. it is destroyed
to release the memory space for reuse:
⮚ lf we want to free a dynamically allocated array, we
must use the following form of delete:
⮚ Recent versions of C++ do not require the size to be
specified:
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Practical : Dynamic Memory Management Operators
91
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Create an array of size given by user using “new” operator (free store operator).
Enter the data to store in array and display the data after adding 2 to each element
in the array. Delete the array by using “delete” memory management operator.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
New vs malloc()
92
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
The new operator offers the following advantages over
the function malloc():
1. It automatically computes the size of the data object.
We need not use the operator sizeof.
2. It automatically returns the correct pointer type, so
that there is no need to use a type cast.
3. It is possible to initialize the object while creating the
memory space.
4. Like any other operator, new and delete can be
overloaded.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Relationships among Objects in an Inheritance Hierarchy
93
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Object Slicing:
When a derived class object is assigned to a base class
object by value, only the base part is copied. This is called
object slicing.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Virtual Destructors
94
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 A virtual destructor ensures that the correct destructor
of the derived class is called when an object is deleted
through a base class pointer.
 Without a virtual destructor, only the base class
destructor runs, and this can lead to resource leaks or
incomplete destruction of derived objects.
🔑 Rule of Thumb
If your class has virtual functions, always make the
destructor virtual, especially if it will be inherited.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Without Virtual Destructors
95
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
With Virtual Destructors
96
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
RAII and Smart pointers
97
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Resource Acquisition Is Initialization (RAII) is a
programming idiom used in C++ to manage resources like
memory, file handles, and network sockets.
Key aspects of RAII:
 Resource Management: RAII ensures that resources are
acquired and released in a deterministic way.
 Object Lifetime: The lifetime of a resource is tied to the
lifetime of an object.
 Automatic Cleanup: Resources are automatically released
when the object goes out of scope, even if exceptions are
thrown.
 Constructor and Destructor: The constructor acquires the
resource, and the destructor releases it.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
RAII and Smart pointers
98
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Smart pointers are a specific implementation of RAII.
 They are objects that behave like pointers but
automatically manage the memory they point to.
 When a smart pointer goes out of scope, it releases the
memory it holds, preventing memory leaks.
Types of Smart Pointers:
• std::unique_ptr: Manages a single resource, and
ownership cannot be shared.
• std::shared_ptr: Allows multiple pointers to share
ownership of a resource.
• std::weak_ptr: Provides a non-owning reference to a
resource managed by a std::shared_ptr.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
RAII and Smart pointers
99
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Benefits of RAII and Smart Pointers:
 Prevents Memory Leaks: Automatic resource release
ensures memory is freed when no longer needed.
 Exception Safety: Resources are released even if
exceptions occur.
 Simplified Code: Reduces the need for manual memory
management.
 Improved Reliability: Ensures proper resource handling,
leading to more robust code.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Without RAII- Manual Resource Management
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Problem:
 if we forget delete d, there will be memory leak.
 If an exception is thrown before delete d, memory is never released.
 This is manual resource management, which is error-prone.
With RAII – Safe and Automatic Resource Management
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Why this is better:
 unique_ptr automatically calls delete when it goes out of scope.
 Even if an exception occurs, memory will still be released.
 This is RAII in action: tie resource (memory) to object lifetime.
Three-Way Comparison Operator(< = >)
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Also known as the spaceship operator.
 It was introduced in C++20 to simplify and unify
comparison logic.
 It automatically generates all six comparison
operators:==, !=, <, <=, >, >=
 It performs a three-way comparison and returns a
value that tells you whether one object is less
than, equal to, or greater than another.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Three-Way Comparison Operator(< = >)
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
NOTE: = default means, the compiler will generate the correct logic for all members
It’s like saying:
Explicit Constructors
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Normally, if you write a constructor that takes one
parameter, the compiler allows implicit conversion.
Problem:Here, 10 gets automatically converted to a MyClass
object — maybe you don’t want that!
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Without Explicit
Explicit Constructors
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Now, the constructor must be called explicitly — no silent
conversions.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
With Explicit
Conversion Operators
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 Also known as casting operator
 Refer Class to Basic Type Conversion
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading the Function Call Operator ()
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
 The function call operator is denoted by “()” which is
used to call function and pass parameters.
 It is overloaded by the instance of the class known as a
function object.
 overloading the function call operator () lets you make
objects of a class behave like functions.
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading the Function Call Operator ()
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
Overloading the Function Call Operator ()
10
Prepared By: Nishat Shaikh
Unit 3: Tokens and Expressions & Control Structure
Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
End of Unit-5

Chapter-5_PC++ polymorphism smart pointers

  • 1.
    Prepared By: Prof. NishatShaikh Dr. Aayushi Chaudhari CEUC102 OBJECT ORIENTED PROGRAMMING WITH C++ UNIT-5 POLYMORPHISM, OVERLOADING, AND SMART POINTERS
  • 2.
    Topics to becovered 2 5.1 Introduction to Polymorphism 5.2 Function overloading 5.3 overloading unary and binary operators and type conversion 5.4 Relationships among Objects in an Inheritance Hierarchy 5.5 Virtual Functions and Virtual Destructors 5.6 Abstract Classes and Pure virtual Functions 5.7 Runtime Polymorphism and Compile-Time Polymorphism 5.8 Operator Overloading Fundamentals 5.9 Dynamic Memory Management with new and delete 5.10 Resource acquisition is initialization (RAII) and Smart Pointers 5.11 Three-Way Comparison Operator(< = >) 5.12 Converting Between Types 5.13 Explicit Constructors and Conversion Operators 5.14 Overloading the Function Call Operator () Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 3.
    Introduction to Polymorphism 3 PreparedBy: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 4.
    Introduction to Polymorphism 4 Polymorphism means more than one form. That is, the same entity (function or operator) behaves differently in different scenarios. Compile time polymorphism / Static Binding / Early Binding  binding is occuring at compile time  Inheritance is not involved Run time polymorphism / Dynamic Binding / late Binding  at run time we came to know which method is going to invoke  Inheritance is not involved Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 5.
    Introduction to Polymorphism 5 Functionoverloading:  Two or more functions having the same name but different parameters [Refer Unit-2] Operator overloading:  It is a compile-time polymorphism in which the operator is overloaded to provide the special meaning to the user-defined data type  In other words, giving the C++ operators such as +, *, == additional meanings when they are applied with user-defined data types. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 6.
    Introduction to Polymorphism 6 PreparedBy: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 7.
    Introduction to Polymorphism 7 PreparedBy: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari Any symbol can be used as function name  If it is a valid operator in C language  If it is preceded by operator keyword We can overload all the C++ operators except the following:  Scope resolution operator (::)  Size operator(sizeof)  member selection (.)  member selection with pointer-to-member(.*)  Ternary/conditional operator(?:)
  • 8.
    Introduction to Polymorphism 8 PreparedBy: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 9.
    Defining Operator Overloading The general form of an operator function is: NOTE: Operator functions must be either member functions(non- static) or friend functions.  Friend function will have only one argument for unary operators and two for binary operators.  Member function has no argument for unary operators and only one for binary operators. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 10.
    Defining Operator Overloading Example PreparedBy: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 11.
    Defining Operator Overloading Theprocess of overloading involves the following steps: 1. Creates a class that defines the data type that is to be used in the overloading operation. 2. Declare the operator function operator op() in the public part of the class. 3. It may be either a member function or a friend function. 4. Define the operator function to implement the required operations. NOTE:  When an operator is overloaded , its original meaning is not lost. Eg: the operator +, which has been overloaded to add two vectors, can still be used to add two integers. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 12.
    Revision Prepared By: NishatShaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 13.
    Overloading Binary Operators PreparedBy: Nishat Shaikh  Binary operators work on two operands.  When we overload the binary operator for user- defined types,  The operator function is called using the obj1 object and obj2 is passed as an argument to the function Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 14.
    Overloading Binary Operators:Ex-1(Addition) Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 15.
    Overloading Binary Operators:Ex-2(Addition) Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 16.
    Overloading Binary Operators NOTE: In Overloading Binary Operators, the left-hand operand is used to invoke the operator function and the right-hand operand is passed as an argument.  We can avoid the creation of the temp object by replacing the entire function body by:  When the compiler comes across a class name with argument list, it invokes an appropriate constructor, initializes an object with no name and returns the contents for copying into an object.  Such an object is called a temporary object and goes out of scope as soon as the contents are assigned to another object Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 17.
    Overloading Binary Operators PreparedBy: Nishat Shaikh Unit 7: Operator Overloading Define a class NUM having two integer members a and b. A class has member functions for input and output. Overload the operators – and = = such that it supports the following statements: NUM N1, N2, N3; N3=N1-N2; if(N1==N2){...} Use the concept of Overloading Binary Operators. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 18.
    Overloading Binary Operators PreparedBy: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 19.
    Overloading Binary Operators PreparedBy: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 20.
    Practical :Overloading BinaryOperators Create a class String having character array. Class includes constructor and required member functions to get and display the object. Overload the following operators for the class. +(s3=s1+s2) ==(s1<s2) +=(s1+=s2) Use the concept of Overloading Binary Operators Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 21.
    Practical :Overloading BinaryOperators Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 22.
    Practical :Overloading BinaryOperators Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 23.
    Overloading Binary OperatorsUsing Friend  As stated earlier, friend functions may be used in the place of member functions for overloading a binary operator.  The only difference is friend function requires two arguments to be explicitly passed to it, while a member function requires only one.  There are certain situations where we would like to use a friend function rather than a member function. Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 24.
    Overloading Binary OperatorsUsing Friend Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 25.
    Prepared By: NishatShaikh Practical : Overloading Binary Operators Using Friend Create a class Measure having members: meter and cm. The class has get( ) and put( ) functions. Overload operator + and – such that they support M1=M2+15 and M3=M1 – 4.5. Also overload + and – such that they support M1=5.0+M2 and M3=2.0 – M4. Write a main( ) to test the class. Use the concept of Overloading Binary Operators with friend function. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 26.
    Prepared By: NishatShaikh Practical : Overloading Binary Operators Using Friend Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 27.
    Prepared By: NishatShaikh Practical : Overloading Binary Operators Using Friend Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 28.
    Overloading Unary Operators Unary operators operate on only one operand. Examples of unary operators  The Unary Minus(-)  increment operator(++)  decrement operator(--)  logical NOT(!) Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 29.
    Overloading Unary Operators:Ex-1(UnaryMinus) Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 30.
    Overloading Unary Operators:Ex-2(UnaryMinus) Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 31.
    Overloading Unary Operators:Ex-3(Increment) PreparedBy: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 32.
    Practical :Overloading UnaryOperators Prepared By: Nishat Shaikh Create a class Number having int num as member. The class has input and output functions. Overload unary operator (++) such that it supports N1=N2++ and N3=++N1 and Overload unary (-) such that it supports N3 = - N3. Also define default, parameterized and copy constructor for the class. Also explain use of nameless object in operator overloading. Use the concept of Overloading Unary Operators. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 33.
    Practical :Overloading UnaryOperators Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 34.
    Practical :Overloading UnaryOperators Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 35.
    Overloading Unary OperatorsUsing Friend Prepared By: Nishat Shaikh  As stated earlier, friend functions may be used in the place of member functions for overloading a Unary operator.  The only difference is friend function requires one arguments to be explicitly passed to it, while a member function requires none. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 36.
    Overloading Unary OperatorsUsing Friend:Ex-1 Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 37.
    Overloading Unary OperatorsUsing Friend:Ex-2 Prepared By: Nishat Shaikh NOTE: If we pass argument by value, it will not work Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 38.
    Practical : OverloadingUnary Operators Using Friend Prepared By: Nishat Shaikh Create a class complex having data members int real , img and member function to print data. Overload Unary operator (-) using friend function such that it supports – C1 where C1 is the object of class complex. Also define default, parameterized and copy constructor for the class. Use the concept of Overloading Unary Operators with friend function. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 39.
    Prepared By: NishatShaikh Practical : Overloading Unary Operators Using Friend Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 40.
    Prepared By: NishatShaikh Practical : Overloading Unary Operators Using Friend Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 41.
    Rules for OverloadingOperators Prepared By: Nishat Shaikh There are certain restrictions and limitation in overloading the operators Some of them are listed below: 1. Only existing operaators can be overloaded New operators cannot be overloaded/created. 2. The overloaded operator must have at least one operand that is of user defined type 3. We cannot change the basic meaning of an operator That is to say, We cannot redefine the plus(+) operator to subtract one value from the other 4. Overloaded operators follow the syntax rules of the original operators They cannot be overridden 5. There are some operators that cannot be overloaded ( sizeof, . , .*, :: , ?: ) Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 42.
    Rules for OverloadingOperators Prepared By: Nishat Shaikh 6. We cannot use friend functions to overload certain operators(=, ( ), [ ], ->) However, member function can be used to overload them 7. Unary operators, overloaded by means of a member function, take no explicit arguments and return no explicit values, but, those overloaded by means of a friend function, take one reference argument (the object of the relevant class) 8. Binary operators overloaded through a member function take one explicit argument and those which are overloaded through a friend function take two explicit arguments 9. When using binary operators overloaded through a member function, the left hand operand must be an object of the relevant class 10. Binary arithmetic operators such as +, -, * and / must explicitly return a value They must not attempt to change their own arguments Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 43.
    Type Conversions Prepared By:Nishat Shaikh  When different types of constants and variables are used in expression, C automatically perform type conversion based on some fixed rules  In assignment operation, variable at the right hand side is automatically converted to the type of the variable on the left  But this automated type promotion will work well if both data types are of primary data type or both are of same user defined data type  But it will create problem when one data type is user defined data type and another is primary data type or they belong to two different classes. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 44.
    Type Conversions Prepared By:Nishat Shaikh  So for that we have to use some special function for type conversion as in such cases automatic type conversion can not be performed by the language itself There are three types of type conversion possible 1. Conversion from basic type to the class type  Using Constructor 2. Conversion from class type to basic type  Using Casting Operator Function 3. Conversion from one class to another class type  Using Constructor  Using Casting Operator Function Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 45.
    1. Conversion frombasic type to the class pe Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 46.
    1. Conversion frombasic type to the class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Create a class Money having integer rupee, paisa as data. Define appropriate functions to enter and display data. Also define function that supports the statement: obj1=115. Here obj1 is object of class and 115 is integer that represents paisa. After execution of the statement obj1 will be 1 rupee 15 paisa. Use the concept of Type conversion from basic type to class type. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 47.
    1. Conversion frombasic type to the class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 48.
    1. Conversion frombasic type to the class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading NOTE: The constructors used for the type conversion take a single argument whose type is to be converted. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 49.
    2. Conversion fromclass type to basic type Prepared By: Nishat Shaikh Unit 7: Operator Overloading The general form of an overloaded casting operator function / conversion function: The casting operator function should satisfy following conditions:  It must be a class member  It must not specify a return type  It must not have any arguments Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 50.
    2. Conversion fromclass type to basic type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 51.
    Practical : Typeconversion Prepared By: Nishat Shaikh Create a class Celsius with float. Define appropriate member functions such that it support the statements: C1=30.5F; float temperature; temperature=C2; Use the concept of Type conversion from basic type to class type and class type to basic type. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 52.
    Practical : Typeconversion Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 53.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading i1 b a 3 4 p1 n m Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 54.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 55.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 56.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Define a class KG having data member float kg and class POUND having data member float lb. Both the classes have default constructor and member functions to get and show data. (1 kg = 2.20462 lb). Define appropriate member functions such that they support the statements in main( ): KG K; POUND P; P=K; Use the concepts of Type conversion from class type to class type. Write this Program in two ways. Define appropriate member function in class KG. Define appropriate member function in class POUND. Pounds=Kilograms * 2.20462262184878 Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 57.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 58.
    3. Conversion fromone class to another class type Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 59.
    Practical : Typeconversion Prepared By: Nishat Shaikh Create classes Celsius and Fahrenheit with float. Define appropriate member functions such that they support the statements in main( ): Celsius C1, C2=5.0; Fahrenheit F1, F2; F1=C2; C1=F2;Use the concepts of Type conversion from class type to class type. Write this Program in two ways. Define appropriate member function in class Celsius. Define appropriate member function in class Fahrenheit. Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 60.
    Practical : Typeconversion Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 61.
    Practical : Typeconversion Prepared By: Nishat Shaikh Unit 7: Operator Overloading Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 62.
    Virtual Functions Prepared By:Nishat Shaikh Unit 9: Pointers and Virtual Functions  There is a necessity to use the single pointer to refer to all the objects of the different classes.  So, we create the pointer to the base class that refers to all the derived objects.  But, when base class pointer contains the address of the derived class object, always executes the base class function.  This issue can only be resolved by using the 'virtual' function. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 63.
    Virtual Functions Prepared By:Nishat Shaikh Unit 9: Pointers and Virtual Functions  Virtual function is a member function in the base class that you redefine in a derived class. It is declared using the virtual keyword.  A 'virtual' is a keyword preceding the normal declaration of a function.  It is used to tell the compiler to perform dynamic linkage or late binding on the function.  When the function is made virtual, C++ determines which function is to be invoked at the runtime based on the type of the object pointed by the base class pointer and not by the type of the pointer.  In late binding function call is resolved during runtime. Therefore compiler determines the type of object at runtime, and then binds the function call. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 64.
    Virtual Functions Prepared By:Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 65.
    Virtual Functions Prepared By:Nishat Shaikh Unit 9: Pointers and Virtual Functions NOTE:  Run time polymorphism is achieved only when a virtual function is accessed through a pointer to the base class. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 66.
    Rules of VirtualFunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions 1. Virtual functions must be members of some class. 2. Virtual functions cannot be static members. 3. They are accessed through object pointers. 4. They can be a friend of another class. 5. A virtual function must be defined in the base class, even though it is not used. 6. The prototypes of a virtual function of the base class and all the derived classes must be identical. If the two functions with the same name but different prototypes, C++ will consider them as the overloaded functions and the virtual function mechanism is ignored 7. We cannot have a virtual constructor, but we can have a virtual destructor Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 67.
    Rules of VirtualFunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions 8. While a base pointer can point to any type of the derived object, the reverse is not true. That is to say, we can not use a pointer to a derived class to access an object of base type 9. When a base pointer points to a derived class, incrementing or decrementing it will not make it to point to the next object of the derived class. It is incremented or decremented only relative to it’s base type. Therefore, we should not use this method to move the pointer to the next object. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 68.
    Practical : Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Create a class Media that stores the title (a string) and price (float). Class Media has two argument constructor which initializes data members of class Media. Also declare a virtual function display () in Class Media. From the class Media derive two classes: Class book, which contains data member page count (int): and Class tape, which contains data member playing time in minutes (float). Both Class book and Class tape should have a constructor which initializes base class constructor as well as its own data members and display ( ) function which displays book details and tape details respectively. Write a main ( ) to test book and tape classes by creating instances of them, asking the user to fill data and displaying them. Use the concept of Virtual function and Constructor in Derived Class. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 69.
    Practical : Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 70.
    Practical : Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 71.
    Practical : Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 72.
    Size of Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 73.
    Size of Virtualfunction Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 74.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions  It is normal practice to declare a function virtual inside the base class and redefine it in the derived classes.  Such function inside base class is not used for performing any task, it only serves as a placeholder.  For ex, display() function in class Media in previous example. Such functions are called “do-nothing” functions.  A “do-nothing” function may be defined as follows:  Such functions are called pure virtual functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 75.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions  A pure virtual function is a function declared in a base class that has no definition relative to the base class.  In such case compiler requires each derived class to either define the function or redeclare it as a pure virtual function.  Class containing pure virtual functions cannot be used to declare any objects of its own and such classes are called abstract base classes Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 76.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 77.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions NOTE: 1. A class is abstract if it has at least one pure virtual function. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 78.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions 2. We can have pointers and references of abstract class type. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 79.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions 3. If we do not override the pure virtual function in derived class, then derived class also becomes abstract class. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 80.
    Abstract class &Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions 4. An abstract class can have constructors. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 81.
    Practical :Abstract class& Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Create an Abstract class vehicle having average as data and pure virtual function getdata() and putdata(). Derive class car and truck from class vehicle having data members: fuel type (petrol, diesel, CNG) and no of wheels respectively. Write a main ( ) that enters the data of two cars and a truck and display the details of them. Use the concept of Abstract Base class and Pure Virtual functions. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 82.
    Practical :Abstract class& Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 83.
    Practical :Abstract class& Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 84.
    Practical :Abstract class& Pure Virtual Functions Prepared By: Nishat Shaikh Unit 9: Pointers and Virtual Functions Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 85.
    Dynamic Memory ManagementOperators 85 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ We use dynamic allocation techniques when it is not known in advance how much of memory space is needed ⮚ C uses malloc() and calloc() functions to allocate memory dynamically at run time. Similarly, it uses the function free() to free dynamically allocated memory. ⮚ Although C++ supports these functions, it also defines two unary operators new and delete that perform the task of allocating and freeing the memory in a better and easier way. ⮚ Since these operators manipulate memory on the free store, they are also known as free store operators . Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 86.
    Dynamic Memory ManagementOperators 86 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ An object can be created by using new, and destroyed by using delete, as and when required. ⮚ A data object created inside a block with new , will remain in existence until it is explicitly destroyed by using delete. ⮚ Thus, the Lifetime of an object is directly under our control and is unrelated to the block structure of the program. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 87.
    new operator 87 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ The new operator can be used to create objects of any type: ⮚ Alternatively, we can combine the declaration of pointers and their assignments as follows: ⮚ Following statement assign 25 to the newly created int object: ⮚ We can also initialize the memory using the new operator Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 88.
    new operator 88 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ The general form for a one-dimensional array is: ⮚ When creating multi-dimensional arrays with new, all the array sizes must be supplied. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 89.
    new operator 89 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ if sufficient memory is not available for allocation, new returns a null pointer Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 90.
    delete operator 90 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure ⮚ When a data object is no longer needed. it is destroyed to release the memory space for reuse: ⮚ lf we want to free a dynamically allocated array, we must use the following form of delete: ⮚ Recent versions of C++ do not require the size to be specified: Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 91.
    Practical : DynamicMemory Management Operators 91 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Create an array of size given by user using “new” operator (free store operator). Enter the data to store in array and display the data after adding 2 to each element in the array. Delete the array by using “delete” memory management operator. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 92.
    New vs malloc() 92 PreparedBy: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure The new operator offers the following advantages over the function malloc(): 1. It automatically computes the size of the data object. We need not use the operator sizeof. 2. It automatically returns the correct pointer type, so that there is no need to use a type cast. 3. It is possible to initialize the object while creating the memory space. 4. Like any other operator, new and delete can be overloaded. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 93.
    Relationships among Objectsin an Inheritance Hierarchy 93 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Object Slicing: When a derived class object is assigned to a base class object by value, only the base part is copied. This is called object slicing. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 94.
    Virtual Destructors 94 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  A virtual destructor ensures that the correct destructor of the derived class is called when an object is deleted through a base class pointer.  Without a virtual destructor, only the base class destructor runs, and this can lead to resource leaks or incomplete destruction of derived objects. 🔑 Rule of Thumb If your class has virtual functions, always make the destructor virtual, especially if it will be inherited. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 95.
    Without Virtual Destructors 95 PreparedBy: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 96.
    With Virtual Destructors 96 PreparedBy: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 97.
    RAII and Smartpointers 97 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Resource Acquisition Is Initialization (RAII) is a programming idiom used in C++ to manage resources like memory, file handles, and network sockets. Key aspects of RAII:  Resource Management: RAII ensures that resources are acquired and released in a deterministic way.  Object Lifetime: The lifetime of a resource is tied to the lifetime of an object.  Automatic Cleanup: Resources are automatically released when the object goes out of scope, even if exceptions are thrown.  Constructor and Destructor: The constructor acquires the resource, and the destructor releases it. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 98.
    RAII and Smartpointers 98 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Smart pointers are a specific implementation of RAII.  They are objects that behave like pointers but automatically manage the memory they point to.  When a smart pointer goes out of scope, it releases the memory it holds, preventing memory leaks. Types of Smart Pointers: • std::unique_ptr: Manages a single resource, and ownership cannot be shared. • std::shared_ptr: Allows multiple pointers to share ownership of a resource. • std::weak_ptr: Provides a non-owning reference to a resource managed by a std::shared_ptr. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 99.
    RAII and Smartpointers 99 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Benefits of RAII and Smart Pointers:  Prevents Memory Leaks: Automatic resource release ensures memory is freed when no longer needed.  Exception Safety: Resources are released even if exceptions occur.  Simplified Code: Reduces the need for manual memory management.  Improved Reliability: Ensures proper resource handling, leading to more robust code. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 100.
    Without RAII- ManualResource Management 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari Problem:  if we forget delete d, there will be memory leak.  If an exception is thrown before delete d, memory is never released.  This is manual resource management, which is error-prone.
  • 101.
    With RAII –Safe and Automatic Resource Management 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari Why this is better:  unique_ptr automatically calls delete when it goes out of scope.  Even if an exception occurs, memory will still be released.  This is RAII in action: tie resource (memory) to object lifetime.
  • 102.
    Three-Way Comparison Operator(<= >) 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Also known as the spaceship operator.  It was introduced in C++20 to simplify and unify comparison logic.  It automatically generates all six comparison operators:==, !=, <, <=, >, >=  It performs a three-way comparison and returns a value that tells you whether one object is less than, equal to, or greater than another. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 103.
    Three-Way Comparison Operator(<= >) 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari NOTE: = default means, the compiler will generate the correct logic for all members It’s like saying:
  • 104.
    Explicit Constructors 10 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Normally, if you write a constructor that takes one parameter, the compiler allows implicit conversion. Problem:Here, 10 gets automatically converted to a MyClass object — maybe you don’t want that! Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari Without Explicit
  • 105.
    Explicit Constructors 10 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Now, the constructor must be called explicitly — no silent conversions. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari With Explicit
  • 106.
    Conversion Operators 10 Prepared By:Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  Also known as casting operator  Refer Class to Basic Type Conversion Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 107.
    Overloading the FunctionCall Operator () 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure  The function call operator is denoted by “()” which is used to call function and pass parameters.  It is overloaded by the instance of the class known as a function object.  overloading the function call operator () lets you make objects of a class behave like functions. Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 108.
    Overloading the FunctionCall Operator () 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 109.
    Overloading the FunctionCall Operator () 10 Prepared By: Nishat Shaikh Unit 3: Tokens and Expressions & Control Structure Prepared By: Prof. Nishat Shaikh & Dr. Aayushi Chaudhari
  • 110.