使用虚方法重定向错误

时间:2013-11-16 16:30:24

标签: c++ class

我有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?

2 个答案:

答案 0 :(得分:1)

函数的类型签名需要匹配。在覆盖这样的函数时,不能在参数中使用多态。就编译器而言,现在B两个方法,virtual int save(X *) const =0virtual int save(Y *) constwhere the second is hiding the first)。由于功能签名不匹配,第二个功能签名实际上并没有覆盖它;它只是隐藏它。

答案 1 :(得分:0)

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