gpt4 book ai didi

c++ - 继承决议

转载 作者:行者123 更新时间:2023-11-30 02:52:24 26 4
gpt4 key购买 nike

我认为类型会自动解析到它们可能的层次结构的最深部分。如果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

这里的最后一行,我发送一个 Catcat->talkTo , 但我正在使用 animalCatPtr . animalCatPtr仍然指代 Cat , 但它只是解决了一个 Animal在函数调用中。

如何使传递指针解析为层次结构中的最深类型?我不想做一系列 dynamic_cast<>测试看是否 Animal我手头真的是一个CatDog或者你有什么。

最佳答案

你想要一种双分派(dispatch)的形式,见http://en.wikipedia.org/wiki/Double_dispatch

关于c++ - 继承决议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com