父類別成員變數在繼承類別中不可見
當繼承一個類別作為範本時,父類別的受保護變數可能不可見在繼承的類別中可見。這可能會導致在存取繼承類別中的這些變數時出現編譯錯誤。
考慮以下範例:
<code class="cpp">// Parent class template <class elemType> class arrayListType { protected: elemType *list; int length; // ... }; // Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem); // ... };</code>
當編譯器遇到 unorderedArrayListType 類別時,它會嘗試驗證 insertAt 函數。但是,它找不到 arrayListType 類別中宣告的 length 和 list 變數。這會導致編譯錯誤。
解決方案
要解決這個問題,有兩種可能的解決方案:
1。前綴為this->
繼承的變數前綴為this->明確指定它們屬於父類別:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem) { this->length++; // ... } // ... };</code>
2.使用宣告
在繼承類別的私有部分宣告繼承的變數:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; using arrayListType<elemType>::list; public: void insertAt(int location, const elemType& insertItem) { length++; // ... } // ... };</code>
這兩種方法都確保編譯器明確地理解繼承的變數來自父類別.
以上是為什麼我無法存取繼承類別中的父類別成員變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!