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派生
  • Private →
  • Protected →
  • Public →
  • 不能繼承
  • Protected
  • Public
  • 不能繼承
  • Private
  • Private
  • 不能繼承
  • Protected
  • Protected
  1. Balagurusamy, E. Object Oriented Programming With C++. Tata McGrawhill. 2010: 213. ISBN 978-0-07-066907-9.