模板:继承类中父类成员变量的可见性
在 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中文网其他相关文章!