#include <iostream>
#include <stdexcept>
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
void derivedFunction() { std::cout << "Derived function" << std::endl; }
};
void processDerived(Base& base) {
try {
Derived& derived = dynamic_cast<Derived&>(base);
derived.derivedFunction();
} catch (const std::bad_cast& e) {
std::cout << "Cast failed: " << e.what() << std::endl;
}
}
int main() {
Base baseObj;
Derived derivedObj;
processDerived(derivedObj); // Succeeds
processDerived(baseObj); // Throws and catches std::bad_cast
return 0;
}