【发布时间】:2014-10-23 09:12:28
【问题描述】:
纯虚函数(即末尾有 = 0 的函数)是否可以被具有常量纯虚函数的继承类覆盖并且仍然被调用?
#include <stdio.h>
struct cBaseClass {
virtual void VirtualFunction () = 0;
};
struct cInheritedClass : cBaseClass {
virtual void VirtualFunction () const {
printf ("I'm a constant virtual function that"
" overrided a pure virtual function!\n");
}
}
};
int main() {
cBaseClass *Foo = new cInheritedClass;
Foo->VirtualFunction ();
}
最后一行应该导致调用 cInheritedClass::VirtualFunction,而不是 cBaseClass::VirtualFunction。我希望常量函数只是一个编译器指令,以确保类中的任何内容也不会被写入并且不会影响继承。我在我的关卡类中将它用于一些碰撞例程,最好指定函数是否可以基于每个对象/类修改类。
【问题讨论】:
-
你试过执行这段代码吗?
-
如果没有被其他子类继承,则不需要virtual关键字
-
你的覆盖函数不纯。
-
@nvoigt: That is obviously not always true.
-
@LightnessRacesinOrbit 我并不是说编译器是终极的、标准实现的、无错误的真理。我只是说在互联网上发帖而不用你自己的编译器测试是没有意义的。
标签: c++ visual-c++ inheritance c++11