Virtual functions allow objects of derived classes to be referenced by pointers or references to the base class. This allows polymorphic behavior where calling code does not need to know the exact derived class, but the correct overridden function for that derived class will be called at runtime. Some key points:
- Virtual functions provide runtime polymorphism in C++. The correct function to call is determined by the actual object type, not the reference/pointer type.
- Pure virtual functions are declared in a base class but provide no definition - derived classes must override these to be instantiable.
- Constructors cannot be virtual but destructors can, and it is important to make base class destructors virtual to ensure proper cleanup
Introduction to key concepts: pointers, virtual functions, and polymorphism in C++. Topics include pointers to objects, the 'this' pointer, and virtual constructors.
Polymorphism discussed as compile-time and run-time. Emphasis on function and operator overloading for compile-time and virtual functions for run-time.
Fundamentals of pointers: declaration, initialization, manipulation, and their use with arrays and strings. Examples demonstrate pointer arithmetic and array of pointers.
'This' pointer is an implicit argument in member functions, holding the address of the calling object, allowing access to member data.
Stating that pointers to base class objects are compatible with derived classes. Introduction to virtual functions and their redefinition in derived classes.
Details on rules and distinctions between virtual and pure virtual functions, including examples highlighting their application in C++ programming.
Illustration of applying pure virtual functions through inheritance in a real-world context, showcasing polymorphism.
Explanation of virtual destructors, their importance for proper resource cleanup in inheritance situations, including sample class structures.
Closing remarks of the presentation including a thank you message.
Function overloading:
An overloadedfunction can have multiple
definitions for the same function name in the same
scope.
Function declarations cannot be
overloaded if they differ only by return type.
Operator overloading:
It is one of the many exciting features of
c++.
important technique that has enhanced
the power of extensibility of c++.
Virtual functions:
we use pointer to base class to refer to
all the derived objects.
5.
Introduction polymorphism in
c++
Polymorphism is one of the crucial features of oop.
Polymorphism divide in 2 types
Compile time
Run time
Compile time Polymorphism
Uses static or early binding
Ex. Function and operator overloading
Run time Polymorphism
Uses Dynamic or early binding
EX.Virtual Functions
6.
compile time Polymorphism
Function overloading is an example of
compile time polymorphism
This decision of binding among several
function is taken by considering formal
arguments of the function , their data type
and their sequence.
7.
Run time polymorphism
It is also known as dynamic binding, late binding
and overriding as well
It provides slow execution as compare to early
binding because it is known at run time
Run time polymorphism is more flexible as all
things execute at run time.
8.
Run time Polymorphism
ForExample:
Class A
{
int x;
public:
void show() {…..}
};
class B : public A
{
int y;
public:
void show() {…..}
};
9.
Pointers
Pointer isa derived data type that refers to
another data variable by storing the
variable’s memory address rather than data.
Pointer variable can also refer to (or point to)
another pointer in c++.
10.
Declaring and Initializing
pointers
The declaration is based on the data type of the
variable it points to.
The declaration is based on the data type of the
variable takes the following form
Syntax:
data-type *pointer –variable;
Let us declare a pointer variable, which points to an
integer variable
int * ptr;
we can initialize a pointer
int* ptr ,a; // declaration
Ptr=&a; // initialization
11.
Example of usingpointers
#include <iostream.h>
#include <conio.h>
Void main()
{
int a,*ptr1,**ptr2;
Clrscr();
Ptr1=&a;
Ptr2=&ptr1;
cout <<“The address of a :”<<ptr1<<“n”;
C 0ut <<“The address of ptr1 :”<<ptr2;
Cout <<“nn”;
Cout <<“after incrementing the address values:n”;
Ptr1+=2;
cout <<“The address of a :”<<ptr1<<“n”;
Ptr2+=2;
Cout <<“The address of ptr1 :”<<ptr2<<“n”;
}
Output:
The address of a:0xfb6fff4
The address of ptr1:ox8fb6ff2
After incrementing the address values:
The address of a:ox8fb6fff8
The address of a:ox8fb6fff6
12.
Manipulation of pointers
Wecan manipulate a pointer with the
indirection operator ,i.e.,’*’which is also
known as dereference operator.
Syntax:
*pointer_variable
13.
Manipulate of pointers
#include<iostream.h>
#include<conio.h>
Intmain()
{
Int a=10;
Int *ptr;
Clrscr();
Ptr=&a;
Cout<<“the value of a is:”<<*ptr;
*ptr=*ptr+a; // manipulate
Cout<<n the revised value of a is”<<a;
getch ();
return o;
}
Output:
The value of a is:10
The revised value of a
is:20
14.
pointer Expressions andpointer arithmetic
A pointer can be incremented(++) or decremented(--)
Any integer can be added to or subtracted from a pointer
One pointer can be subtracted from another
Example:
int a[6];
int *aptr;
aptr=&a[0];
We can increment the pointer variable
aptr++ (or) ++aptr
We can decrement the pointer variable
aptr-- (or) --aptr
15.
Using pointers witharrays and strings
Pointer is one of the efficient tools to access
elements of an array.
We can declare the pointers to array
int *nptr;
nptr=number[0];
nptr points to the first element of the integer
array, number[0].
float*fptr;
fptr=price[0];
16.
Array of pointers
The array of pointers represents a collection
of addresses.
An array of pointers point to an array of data
items.
We can declare an array of pointers as
int *inarray[10];
17.
program array ofpointer
#include<iostream.h>
Const int MAX=4;
int main()
{
Char*names[100]={“priya”,”nathiya”,”riya”,”sri”,”chitra”};
For (int i=0;i<100;i++)
{
Cout<<“value of names[“<<i<<“]=“;
Cout<<names[i]<<endI;
}
return 0;
}
18.
Pointer and strings
There are two ways to assign a value to a
string
We can use the character array or variable of
type char*.
char num[]=“one”;
const char*numptr=“one”;
19.
This pointer
This uniquepointer is automatically passed to a
member function when it is called
The pointer this acts as an implicit argument to
all the member functions
This pointer is an implicit parameter to all
member functions.
20.
Example for Thispointer
Class className
{
Private:
int dataMember;
Public:
Method(int a)
{
//This pointer stores the address of object obj and access dataMemberThis -> dataMember=a;
… … ..
}
}
int main()
{
className obj;
Obj.method(5);
….. … …
}
21.
Pointers toobjects of a base class are type
compatiable with pointers to objects of a
derived class
A single pointer variable can be made to point
to objects belonging to different classes.
pointer to derived class
22.
virtual functions
Avirtual function is a member function of class
that is declared within a base and re-defined in
derived class.
Syntax:
virtual return_type function_name()
{
……..
……..
}
23.
Rules of virtualfunctions
Virtual functions are created for implementing
late binding
The virtual functions must be members of
some class .
They cannot be static members.
They are accessed by using object pointers.
A virtual function can be a friend of another
class.
24.
Difference between virtualand pure
virtual Functions
BASIS FOR
COMPARISON
VIRTUAL FUNCTION PURE VIRTUAL FUNCTION
Base ‘virtual function’
has their definition
in the base class
‘pure virtual function’ has no
definition in the base class.
Declaration Funct_name(parame
ter_list){….};
Virtual
funct_name(parameter_list)=0;
Derived class All derived classes
may or may not
override the virtual
function of the base
class
All derived classes must
override the virtual
function of the base class.
25.
Pure virtual functions
A function virtual inside the base class and
redefine it in the derived classes.
for ex. we have not defined any object of
class media and therefore the function
display().
The base class has been defined ‘empty’.
Virtual void display()=0;
26.
Pure virtual functionreal world example
int main()
{
Shape*sptr;
Rectangle rect;
Sptr=& ret;
Sptr->set_data (5,3);
Cout<<“area of rectangle is”<<sptr->area()<<endl;
Trangle tri;
Sptr=&tri;
Sptr->set_data(4,6);
Cout<<“area of triangle is”<<sptr->area()<<endLl;
Return 0;
}
27.
virtual constructors anddestructors
“A constructor can not be virtual “.there are some valid reasons that justify this statement
First to create an object the constructor of the object class must be of the same type as the class.
Class declarations that make use of destructors
class A
{
public:
~a()
{
// base class destructor
}
};
class B:publicA
{
public:
~b()
{
//derived class destructor
}
};
Main()
{
A* ptr=new B();
.
.
Delete ptr;
}
28.
We must declarethe base class destructor
Class A
{
Public:
Virtual ~A()
{
// base class destructor
}
};