#include <afx.h>
class Animal : public CObject
{
DECLARE_DYNAMIC(Animal)
};
class Dog : public Animal
{
DECLARE_DYNAMIC(Dog)
};
class Cat : public Animal
{
DECLARE_DYNAMIC(Cat)
};
class CFoo
{
public:
void AnimalSays(Animal*);
};
int main(int argc, char* argv[])
{
Dog rex;
Cat kitty;
CFoo foo;
foo.AnimalSays(&rex);
foo.AnimalSays(&kitty);
return 0;
}
IMPLEMENT_DYNAMIC(Animal, CObject)
IMPLEMENT_DYNAMIC(Dog, Animal)
IMPLEMENT_DYNAMIC(Cat, Animal)
void CFoo::AnimalSays(Animal* pAnimal)
{
if(pAnimal->IsKindOf(RUNTIME_CLASS(Dog)))
printf("Bark! ");
else if(pAnimal->IsKindOf(RUNTIME_CLASS(Cat)))
printf("Miaou! ");
}
MSDN链接:Accessing Run-Time Class Information
Deriving a Class from CObject