首頁 >後端開發 >C++ >繼承類別如何存取 C 中模板化父類別中受保護的變數?

繼承類別如何存取 C 中模板化父類別中受保護的變數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-06 20:16:12610瀏覽

How Can Inherited Classes Access Protected Variables in Templated Parent Classes in C  ?

從模板化父類別存取繼承變數

提供的程式碼片段說明了繼承類別Bar 嘗試存取其受保護變數的場景父類別Foo,它是一個模板類別。然而,編譯器會產生錯誤,導致人們對編譯器是否遵守標準感到困惑。

根據 C 標準,模板中的非限定名稱被認為是非依賴的,必須在定義模板時解決。由於專門的基類模板在模板定義期間可能不可用,因此未解析的不合格名稱會導致錯誤。

這適用於基類中宣告的變數和函數,如 Bar 可以存取的範例所示a using 限定名稱或 using 宣告。後者允許派生類別內進行不合格的訪問,從而解決了最初的錯誤。

例如,以下程式碼修改解決了該問題:

template<class T>
int Bar<T>::Perna(int u) {
  int c = Foo<T>::a * 4;  // Qualified name
  c = this->a * 4;        // Pointer to own instance
  using Foo<T>::a;
  c = a * 4;               // Using declaration
}

透過澄清查找規則並提供替代解決方案,這個解釋強調了模板解析的細微差別,並幫助開發人員理解編譯器行為背後的基本原理。

以上是繼承類別如何存取 C 中模板化父類別中受保護的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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