Simulating the Dynamic Cast
class Dog; // forward reference class Cat; class Mammal { public: virtual Dog * isaDog() { return 0; } virtual Cat * isaCat() { return 0; } }; class Dog : public Mammal { public: virtual Dog * isaDog() { return this; } }; class Cat : public Mammal { public: virtual Cat * isaCat() { return this; } }; Mammal * fido; Dog * lassie;