c – 使库函数使用从库类派生的类

我有一个.dll,我可以自己建立.我有一个类Lion,派生自库中的类Cat,它覆盖了一个虚函数Leap().我想创建一个Lion类型的对象,将它传递给期望一种类型Cat的库函数,这样当它们调用Cat-> Leap()时,它们使用覆盖的虚函数Lion-> Leap( ).

这是可能吗?

到目前为止,我尝试过的所有内容最终都被忽略了被覆盖的功能.我猜这是因为当编译库时,它解决了如何解析对Leap()的调用,此时我的派生类型不存在.或者,因为库引用了Cat类型的对象(实际上是Lion类型),所以它调用Cat :: Leap(),而不是Lion :: Leap().

我曾经认为函数是虚拟的这一事实意味着,即使它是从库中调用的,它也会通过在运行时查看对象的vtable来解析调用,这将是派生的类型.

谢谢.

最佳答案 为了使其工作,库需要以某种方式编写:它应该通过引用或指针来获取它的Cats,而不是通过值(不幸的是,参数在C中传递的默认方式).如果您将Lion传递给期望Cat值的函数,则Lion会获得
sliced到Cat,并且就函数而言实际上变为Cat.

点赞