模板:繼承類別中父類別成員變數的可見性
在C 範本中,父類別的成員變數在繼承類別中可能不可見預設繼承類別。這可能會導致存取這些變數時出現編譯錯誤。
考慮以下範例:
<code class="cpp">template <class elemType> class arrayListType { protected: elemType *list; int length; }; template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { void insertAt(int, const elemType&); // Function that uses 'list' and 'length' };</code>
在繼承類別unorderedArrayListType 中,直接存取受保護的變數清單和長度將導致以下錯誤因為“'長度'未在此範圍內聲明” 。要解決這個問題,我們需要在衍生類別中明確聲明這些變數。
有兩種主要方法可以實現此目的:
使用「this ->」前綴:
給每個成員變數加上this-> 前綴,例如:
<code class="cpp">void insertAt(int location, const elemType& insertItem) { for (int i = this->length; i > location; i--) this->list[i] = this->list[i - 1]; this->list[location] = insertItem; this->length++; }</code>
使用宣告:
在衍生類別的私有部分中包含成員變數的聲明,例如:
<code class="cpp">class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; // Declare 'length' explicitly using arrayListType<elemType>::list; // Declare 'list' explicitly public: void insertAt(int, const elemType&); };</code>
以上是如何在 C 範本中存取繼承類別中受保護的成員變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!