#include using namespace std; class Animal { public: virtual ~Animal() {} // Initiate polymorphism via virtual destructor }; class Cat : public Animal { }; class Dog : public Animal { public: void bark() const { cout << "woof\n"; } }; int main() { Cat fred; Dog fido; fido.bark(); Animal* ptrAnimal; Dog* ptrDog; // Call the bark function using an Animal* ptrAnimal = &fido; // ptrAnimal -> bark(); // Call the bark function using an Animal* cast to a Dog* dynamic_cast(ptrAnimal) -> bark(); // Testing a dynamic cast ptrDog = dynamic_cast(&fido); cout << "&fido=" << &fido << " ptrDog = " << ptrDog << endl; ptrDog = dynamic_cast(&fred); cout << "&fred=" << &fred << " ptrDog = " << ptrDog << endl; }