虚拟方法重定向错误

Bad redirection with virtual method

本文关键字:错误 重定向 方法 虚拟      更新时间:2023-10-16

我有 2 个类 A 和 B,其中 B 继承自 A.在 A 内部,我有这个方法virtual int save(X *) const =0。在 B 内部,我希望这种方法virtual int save(Y *) const

我还有类 X 和 Y,其中 Y 继承自 X。

但是编译器说我不能做一个B的实例,因为它是抽象的。为什么这不起作用?编译器看不到 Y 是从 X 继承的?

函数的类型签名需要匹配。重写此类函数时,不能在参数中使用多态性。就编译器而言,现在B有两种方法,virtual int save(X *) const =0virtual int save(Y *) const(其中第二种隐藏了第一种方法)。由于函数签名不匹配,因此第二个签名实际上并没有覆盖它;它只是隐藏它。

A中的抽象方法可以接受任何X指针。如果你想覆盖它,你必须接受原始方法所做的一切。仅处理指向Y的指针的方法不会这样做。