问题描述:纯虚函数在派生类里明明补写出来了定义,但是实际发现是无效的,派生类因没有定义该纯虚函数同样被编译器视为了抽象类。
原因很有可能是:基类和派生类的虚函数必须类型、名字、参数数量、名字、类型、以及函数前后缀的各种其他属性(比如const等)必须完全一致!否则会被认为不是同一个函数。无法产生“覆盖”的效果,而可能仅仅是“重载”,这样就会有各种意想不到的问题了。比如我便是在派生类里重写该纯虚函数时末尾没有加const,从而产生了文章开头的问题。
另外一个需要注意的现象是:
在派生类定义里对应函数开头加上virtual也不行。注意,在派生类里详细定义该函数时加virtual可以加、也可以不加。在派生类里外详细定义该函数时加virtual似乎反而会报错。注意这个情况。(可以参考:https://blog.csdn.net/wuchuanpingstone/article/details/6880093)