#include <iostream>
class Base {
public:
virtual void print() { std::cout << "Base" << std::endl; }
virtual ~Base() {}
};
class Derived : public Base {
public:
void print() override { std::cout << "Derived" << std::endl; }
void derivedMethod() { std::cout << "Derived method" << std::endl; }
};
int main() {
Base* basePtr = new Derived();
// Safe downcasting
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->derivedMethod();
} else {
std::cout << "Cast failed" << std::endl;
}
delete basePtr;
return 0;
}