首頁  >  文章  >  後端開發  >  為什麼繼承類別模板時基類的公共成員變得不可見?

為什麼繼承類別模板時基類的公共成員變得不可見?

Susan Sarandon
Susan Sarandon原創
2024-11-02 15:13:30259瀏覽

Why do public members of a base class become invisible when inheriting a class template, and what are the solutions to this problem?

避免繼承類別範本中公共成員不可見和程式碼膨脹

物件導向程式依賴於受保護和公用類別成員的繼承。在非模板化環境中,這種繼承很簡單。然而,在引入類別模板時,出現了一個基本問題:基底類別的公共成員對於衍生類別模板變得不可見。

問題

考慮以下範例:

當範本化此程式碼時,CBase 的Fn1() 成員從CDerived 的角度消失:

解決方案

有多種解決方案可以解決此問題:

解決方案1(詳細前綴) :

但是,這種方法在引用多個成員時會導致過多的程式碼膨脹。

解決方案 2(詳細的「this->」前綴):

與解決方案 1 類似,但稍微簡潔一些。

解決方案 3(使用語句):

這允許直接存取 CBase 成員,無需額外前綴。

解決方案 4(寬容模式):

禁用嚴格的 C 合規性,解決了問題,但可能會引入可移植性問題。

更好的解決方案

雖然解決方案 3 是比其他的解決方案

雖然解決方案 3 是比其他的更乾淨,它仍然需要重複的「使用」語句。宏可以簡化這一點:

在衍生類別中:

這種方法顯著減少了程式碼膨脹和重複。

以上是為什麼繼承類別模板時基類的公共成員變得不可見?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn