C++/繼承
外觀
< C++
三種inheritance relationship(繼承關係):
- public inheritance(公開繼承)視為一個 is-a 關係。是接口繼承(父類的接口,在子類中也是公開的。在任何父類可以使用的地方,都可以替換為子類)。例如Student公開派生自Person,Student的對象可見可操作Person類的公開的或保護的數據成員與方法成員。
- private inheritance(私有繼承)意味着 is-implemented-in-terms-of(是根據……實現的)。私有繼承純粹是一種實現技術。是實現繼承。私有的基類全部是派生類的實現細節因此對外不可見。私有繼承在軟件設計期間沒有任何意義,只在軟件實現期才有考慮的可能。只要能就用 composition(複合),只有在絕對必要的時候才用私有繼承。這包括將要成為 derived class(派生類)的類需要訪問基類的 protected parts(保護構件),或者希望重定義一個或多個基類的虛函數。另一種情況是基類沒有數據,這可以節約存儲空間(empty base optimization,EBO,空基優化)。
- 不能將一個 derived class object(派生類對象)轉型為一個 base class object(基類對象)
- 從一個 private base class(私有基類)繼承的 protected(保護)的或 public(公有)的members(成員)會成為 derived class(派生類)的 private members(私有成員)。
- protected inheritance(保護繼承):極少用到。
被繼承的成員的可見性
[編輯]下表[1]
基類可見性 | 派生類可見性 | ||
---|---|---|---|
Public派生 | Private派生 | Protected派生 | |
|
|
|
|
- ↑ Balagurusamy, E. Object Oriented Programming With C++. Tata McGrawhill. 2010: 213. ISBN 978-0-07-066907-9.