When I static_cast a Derived object to a base object and call a print function with a base pointer, I still am getting the print function from Derived. I am a little confused as I was expecting base class print function.
Code:
#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
int i;
public:
Base()
{
std::cout<<"Base Constructor"<<endl;
}
Base(const Base &)
{
std::cout<<"Base Copy Constructor"<<endl;
}
virtual ~Base()
{
std::cout<<"Base Destructor"<<endl;
}
virtual void print()
{
std::cout<<"Its Base"<<endl;
}
virtual void print_s ()
{
std::cout << "Its Base print_2" << endl;
}
};
class Derived : public Base
{
public:
Derived()
{
std::cout<<"Derived Constructor"<<endl;
}
Derived(const Derived &)
{
std::cout<<"Derived Copy Constructor"<<endl;
}
virtual ~Derived()
{
std::cout<<"Derived Destructor"<<endl;
}
void print()
{
std::cout<<"Its Derived"<<endl;
}
void print_s ()
{
std::cout << "Its Derived print_2" << endl;
}
};
int main(int argc, char *argv[])
{
Base* b = new Derived;
Base* bptr = new Derived;
(*bptr) = static_cast<Base>(*b);
bptr->print();
return 0;
}
Comment