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