我有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?
答案 0 :(得分:1)
函数的类型签名需要匹配。在覆盖这样的函数时,不能在参数中使用多态。就编译器而言,现在B
有两个方法,virtual int save(X *) const =0
和virtual int save(Y *) const
(where the second is hiding the first)。由于功能签名不匹配,第二个功能签名实际上并没有覆盖它;它只是隐藏它。
答案 1 :(得分:0)
A
中的抽象方法可以接受任何X
指针。如果要覆盖它,则必须接受原始方法所做的一切。仅处理指向Y
的指针的方法不会这样做。