首頁 > 後端開發 > C++ > 主體

除了 `std::exception` 之外,您可以擴展 C 標準庫中的其他類別嗎?

Mary-Kate Olsen
發布: 2024-11-03 12:33:31
原創
498 人瀏覽過

Can You Extend Other Classes in the C   Standard Library Beyond `std::exception`?

透過繼承擴展C 標準庫

C 標準庫被廣泛認為是難以接近的繼承堡壘,但它背後隱藏著一個隱藏的異常它的隊伍。 std::exception 類別是獨立的,是為擴展而明確設計的唯一實體。這就引出了一個問題:

其他標準庫類別可以擴充嗎?

雖然不存在明確的列表,但答案取決於破解標準的意圖。務實的方法包括仔細檢視以下標準:

  • 缺乏虛擬方法:缺乏虛擬方法的類別不適用於基底繼承(例如 std::vector)。
  • 虛擬方法的存在:這些類別可以作為潛在的基礎
  • 友元聲明:大量的友元聲明暗示封裝問題,不鼓勵繼承。
  • 模板性質:模板需要評估;專業化通常足以進行客製化。
  • 基於策略的機制:這些類別(例如 std::char_traits)通常會抵制繼承。

含義從標準庫繼承類別

擴充std::exception 突出了另一個問題:

遵守介面期望

從標準函式庫類別繼承時,必須尊重繼承的介面。例如,更改 What() 成員函數以傳回空指標而不是有效描述的子類別將違反 ISO 標準中指定的介面。雖然嚴格來說不是標準一致性問題,但它會損害正確性並破壞基類的可替代性原則。

以上是除了 `std::exception` 之外,您可以擴展 C 標準庫中的其他類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板