在繼承體系中有的時候希望只繼承乙個介面,例如在圖形體系中繼承draw()函式,因為每個圖形都有不同的畫法,所以只能繼承乙個介面,具體怎麼畫要到派生類中具體實現。所以要定義如下:
class shape
;class rectangle : public shape
};class angle : public shape
};
這種情況就屬於只繼承介面的。
還有就是有的時候要繼承介面和實現的,以前對這個知識點不知道。舉個栗子吧。比如以上的模型中矩形和三角形的畫法是相同的,但是畫橢圓的時候畫法是不一樣的。那麼我就希望其中倆個類是繼承實現和介面。而橢圓類只繼承介面,這樣的需求我們該怎麼辦呢?
有倆種方法可以做到。第一種就是定義乙個預設畫法的函式(defaultdraw() ),**如下:
class shape
};class rectangle : public shape
};class angle : public shape
};class eillpse : public shape
};
這樣做到了類rectangle和angle的畫法是一致的,而類eillpse是不一樣的。因為外界不必知道怎麼畫,所以申明為「protected」。然而可能會覺得這樣做不是很好。有一種更加巧妙的方式,不用額外定義函式就可以做到有的類可以只繼承介面,有的類繼承實現。具體**如下:
class shape
;void shape::draw()
class rectangle : public shape
};class angle : public shape
};class eillpse : public shape
};
直接定義純虛函式就可以做到實現與介面的分離操作。多麼完美的技巧啊。如果想要繼承實現直接呼叫「shap::draw()」,如果是繼承介面直接重新定義實現就可以了。
區分介面繼承和實現繼承
表面上的public繼承概念,其實經過嚴密的嚴查之後,會發現它由兩部分組成 函式介面繼承和函式實現繼承。這兩種繼承的差異,其實就是函式宣告與函式定義之間的差異。作為class的設計者,有時候你會希望derived class只繼承成員函式的介面 也就是宣告 有時候你又希望derived class同...
類繼承 繼承類的建構函式
派生類不能直接訪問基類的私有成員,必須通過基類提供的公有方法。派生類不能繼承基類的建構函式,因為建構函式和成員函式存在區別 建構函式用於建立新的物件,而其他成員函式是被現有的物件呼叫。派生類建構函式必須使用基類的建構函式。建立派生類物件時,先建立基類物件,因此基類物件應該在進入派生類建構函式之前被建...
介面繼承與實現繼承
所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告 而實現繼承,就是派生類同時繼承函式的介面和實現。我們都很清楚c 中有幾個基本的概念,虛函式 純虛函式 非虛函式。虛函式 虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類...