我认为类型会自动解析到层次结构的最深部分。如果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
或你有什么。