請看下面的代碼:爲什麼抽象派生類需要初始化一個虛擬基類?
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