我认为类型会自动解决最深的部分他们可以。如果Cat : Animal
和你打电话cat->talk()
,如果Cat
覆盖Animal
类talk()
,猫会说“喵”,而不是一些奇怪的通用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
仍然指代Cat
,但它的解析仅仅是函数调用中的Animal
。
如何使传递指针解析为层次结构中最深的类型,它真的是?我不想做一系列的dynamic_cast<>
测试,看看我手上的Animal
是否真的是Cat
或Dog
或你有什么。
只有'void(Animal *)'成员函数被覆盖。另一个是* new *重载,只在'Cat'中定义。 –