型は階層の最も深い部分に自動的に解決されると思いました。を呼び出し、from クラスをオーバーライドすると、基本クラスで提供される奇妙な一般的な不平ではなく、猫は「ニャー」と言うでしょう。Cat : Animal
cat->talk()
Cat
talk()
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
toを送信していますcat->talkTo
が、 を使用していanimalCatPtr
ます。 animalCatPtr
は引き続き a を参照しますが、関数呼び出しではCat
単に an に解決されます。Animal
パス ポインタを実際の階層の最も深い型に解決するにはどうすればよいですか? 私が手元に持っているものが本当にあなたのものかどうかdynamic_cast<>
を確認するために一連のテストを行いたくありません。Animal
Cat
Dog