如果我有C ++函数/方法,例如:

getSound(Animal a){
  a.printSound();
}


然后向它传递一个Dog对象,该对象扩展了类Animal但重写了Animal的printSound()方法,是否可以在printSound()中使用Dog的getSound()

我曾尝试在printSound()类定义中将Animal设为虚拟,但是我仍在获取原始printSound()的输出。

提前致谢。

最佳答案

使printSound虚拟是正确的。更改getSound的签名以采用Animal&const Animal&。通过按值获取Animal,您可以从Animal构造新的Dog,而这只是Animal,而不是Dog

关于c++ - C++作为父类(super class)传递后使用重写的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12028250/

10-11 01:32