我认为类型会自动解析到层次结构的最深部分。如果Cat : Animal你打电话cat->talk(),如果Cat覆盖一个talk()from 类Animal,猫会说“喵”,而不是基类中提供的一些奇怪的一般Animal抱怨Animal。
所以我对此感到困惑:
struct Animal
{
virtual void talkTo( Animal* o ) {
puts( "Animal-Animal" ) ;
}
} ;
struct Cat : public Animal
{
virtual void talkTo( Animal* o ) {
puts( "Cat-Animal" ) ;
}
virtual void talkTo( Cat* o ) {
puts( "Cat says meow to Cat" ) ;
}
} ;
这是一些调用代码:
Cat *cat = new Cat() ;
cat->talkTo( cat ) ; //Cat says meow to Cat
Animal *animalCatPtr = cat ;
cat->talkTo( animalCatPtr ) ; //Cat-Animal
这里的最后一行,我发送Cat到cat->talkTo,但我正在使用animalCatPtr. animalCatPtr仍然指的是 a Cat,但它只是Animal在函数调用中解析为 a 。
如何使传递指针解析为层次结构中最深的类型?我不想做一系列的dynamic_cast<>测试来看看Animal我手头的东西是否真的是一个Cat或Dog或你有什么。