#include <iostream>
class Animal {
public:
virtual void speak() = 0;
virtual ~Animal() {}
};
class Flyable {
public:
virtual void fly() = 0;
virtual ~Flyable() {}
};
class Bird : public Animal, public Flyable {
public:
void speak() override { std::cout << "Chirp" << std::endl; }
void fly() override { std::cout << "Bird is flying" << std::endl; }
};
int main() {
Bird* bird = new Bird();
Animal* animal = bird;
// Cross-casting from Animal* to Flyable*
Flyable* flyable = dynamic_cast<Flyable*>(animal);
if (flyable) {
flyable->fly();
} else {
std::cout << "Cast failed" << std::endl;
}
delete bird;
return 0;
}