Here's a piece of code I had written to see the behaviour during downcasting.
#include <iostream>
using namespace std;
class base {
public :
void function()
{
cout << "\nInside class Base";
}
};
class derived : public base {
public :
void function()
{
cout << "\nInside class Derived.";
}
};
int main()
{
base * b1 = new base();
base * b2 = new derived();
derived * b3 = (derived*)b1 ;
b1 -> function();
b2 -> function();
b3 -> function(); // print statement 3
static_cast<derived*>(b2) -> function();
static_cast<derived*>(b1) -> function(); // print statement 5
return 0;
}
The output is as follows .
Inside class Base
Inside class Base
Inside class Derived.
Inside class Derived.
Inside class Derived.
I feel print statement 3 and print statement 5 should have displayed "Inside class base" .
Can someone please explain what I might be missing here?