Upcasting: It is the process of converting derived-class reference or pointer to the base class.
Downcasting: It is the process of converting base-class reference or pointer to the derived class.
Upcasting:
Here the derived class pointer is converted to base class.
This is allowed in inheritance.
There is no need of explicit typecasting.
There is an is-a relationship between the base class and derived class.
Object-slicing can occur in upcasting.
Example of upcasting:
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class Base { public: void baseFun() { cout<<"Base Function"<<endl; } }; class Derived: public Base { public: void derivedFun() { cout<<"Derived Fun"<<endl; } }; int main( ) { Derived dObj; //upcasting - implicit upcasting is allowed Base *bPtr = &dObj; bPtr -> baseFun(); return 0; }
Output:
Base Function
Downcasting:
It converts base class pointer to derived class pointer.
You need to explicitly type cast during downcasting.
#include <iostream> // std::cout // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; class Base { public: void baseFun() { cout<<"Base Function"<<endl; } }; class Derived: public Base { public: void derivedFun() { cout<<"Derived Fun"<<endl; } }; int main( ) { Base bObj; // explicit type cast is required Derived *dPtr = (Derived *) &bObj; dPtr -> derivedFun(); return 0; }
Output:
Derived Fun