请看以下代码:
struct Object;
struct Component
{
Component(Object* obj) { }
};
struct Renderable : public virtual Component
{
virtual void Render() = 0;
};
struct AnimationRenderer : public Renderable
{
AnimationRenderer(Object* obj) : Component(obj) { }
virtual void Render() { }
};
这段代码无法编译,因为Renderable::Renderable()
没有匹配的调用Component::Component()
。
我可以通过给Renderable
一个构造函数来使此示例工作,例如Renderable():Component(NULL){}
,即使Renderable永远无法初始化Component。
由于Renderable
是抽象类,因此无法直接实例化。由于它从Component
中虚拟继承,所以它永远无法调用Component
的初始化。
语言要求永远不会/不能被调用的代码的原因是什么?