dynamic_cast example
// File: dynamic_cast.cpp
#include <iostream>
using namespace std;
class pet
{
virtual void funk() {}
};
class dog: public pet
{
public:
void non_virtual_dog_funk() {
cout << "Executing non_virtual_dog_funk()" << endl;
}
};
class cat: public pet
{
public:
void non_virtual_cat_funk() {
cout << "Executing non_virtual_cat_funk()" << endl;
}
};
int main()
{
pet* pp;
dog* pd;
cat* pc;
pet p;
dog D;
cat C;
pp = &D;
// pd = pp;
pd = dynamic_cast<dog*>(pp);
if (!pd) {
cerr << "pd = dynamic_cast<dog*>(pp) failed the first time\n";
pd->non_virtual_dog_funk();
}
else {
pd ->non_virtual_dog_funk();
// pp->non_virtual_dog_funk(); why?
}
pp = &C;
pd = dynamic_cast<dog*>(pp);
if (!pd) {
cerr << "pd = dynamic_cast<dog*>(pp) failed the second time\n";
// pd->non_virtual_dog_funk(); why?
}
}