Just for fun:
Code:
#include <iostream>
class Animal
{
public:
virtual ~Animal() {}
virtual void Speak() = 0;
};
class Dog : public Animal
{
public:
void Speak() { std::cout << "Woof" << std::endl; }
};
class Pig : public Animal
{
public:
void Speak() { std::cout << "Oink" << std::endl; }
};
void Piggy( Animal *animal )
{
Pig pig;
*(unsigned int *)animal = *(unsigned int *)&pig;
}
int main()
{
Dog *dog = new Dog();
dog->Speak();
Piggy( dog );
dog->Speak();
return 0;
}
1. How does it work?
2. Can you think of any real applications for this?