请看下面的代码:为什么抽象派生类需要初始化一个虚拟基类?
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
继承的,所以它将永远无法调用Component
的初始化。
该语言需要永不/永远不会调用的代码的原因是什么?
我也乐于提供更好的标题建议。 –
我认为这就是“抽象”的意思 - 我们可以想到的东西,但不是一个具体的对象。 – Dinesh
抽象类可以由编译器实例化。 – yngccc